虽然我已经了解了缓冲区和流以及它们在C++文件操作中的工作原理,但我不知道如果有流,缓冲区有什么必要性。流始终可以将一个文件的数据传输到程序中。那么为什么我们使用缓冲区来存储数据(执行与流相同的任务),缓冲流和非缓冲流是什么。
ofstream file("abc.txt"); //Here an object of output file stream is created
file<<"Hello"; //We are just giving our data to stream and it transfers that
file.close(); //The closing of file
缓冲区和流是不同的概念。
缓冲区是内存中用于临时存储数据的一部分。它可以以各种方式进行实现和结构化。例如,如果要读取一个非常大的文件,则可以读取该文件的块并将其存储在缓冲区中。一旦处理完某个块,数据就可以被丢弃,并且可以读取下一个块。在这种情况下,块可以是文件的一行。
流是C++处理输入和输出的方式。它们的实现使用缓冲区。
我同意流(stream)可能是标准库中写得最差、被理解最差的部分。人们每天都在使用它,但很多人对他们使用的构造方式一无所知。为了好玩,试着问一下什么是std::endl
,你可能会发现有些答案很有趣。
无论如何,流和流缓冲区有不同的职责。流应该提供格式化的输入和输出——也就是将整数转换为字节序列(或反之),而缓冲区则负责将字节序列传输到媒体上。
不幸的是,这种设计在实现上并不清晰。例如,我们有所有那些众多的流——例如文件流和字符串流——而这些之间唯一的区别就是缓冲区。流代码保持完全相同。我相信,如果有人有机会重新设计流,许多人会这样做,但恐怕这不会发生。