尽管我已经阅读了有关缓冲区和流的信息,并且它正在处理 C++ 中的文件,但是我不知道如果存在流,缓冲区需要什么,流总是在那里将一个文件的数据传输到程序。那么为什么我们使用缓冲区来存储数据(执行与流相同的任务)以及缓冲和未缓冲的流。
小智 5
好吧,让我们从头开始,假设您想处理文件。为此,您必须管理数据如何输入文件、将数据发送到文件是否成功以及所有其他基本工作问题。现在,您可以自己管理所有这些,这需要花费大量时间和精力,或者您可以使用流。
是的,您可以为此目的分配流。流使用抽象机制,即我们 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
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用文件,您应该知道使用文件是一项非常昂贵的操作,即访问文件比访问内存花费更多的时间,而且我们也不必每次都执行文件操作。因此,程序员创建了一个称为缓冲区的新功能,它是计算机内存的一部分,临时存储数据以处理文件。
假设每次读取数据时,在读取文件的地方,您只是读取临时复制文件所有数据的某个内存位置。现在,由于您正在读取内存而不是文件,因此这将是一项较便宜的任务。
那些具有工作缓冲区的流(即打开文件并默认将文件的所有数据复制到缓冲区)称为缓冲流,而那些不使用任何缓冲区的流称为非缓冲流。
现在,如果您将数据输入到缓冲流中,那么该数据将排队直到流不被刷新(刷新意味着用文件的数据替换缓冲区的数据)。无缓冲流的工作速度更快(从流一端的用户角度来看),因为数据不会临时存储到缓冲区中,而是在到达流时发送到文件。