C++-缓冲区和流都需要什么?

Sha*_*rma 4 c++ stream

尽管我已经阅读了有关缓冲区和流的信息,并且它正在处理 C++ 中的文件,但是我不知道如果存在流,缓冲区需要什么,流总是在那里将一个文件的数据传输到程序。那么为什么我们使用缓冲区来存储数据(执行与流相同的任务)以及缓冲和未缓冲的流。

Dav*_*rtz 6

考虑一个写入文件的流。如果没有缓冲区,如果您的程序将单个字节写入流,则您必须将单个字节写入文件。这是非常低效的。因此,流具有缓冲区以将流一侧的操作与流另一侧的操作分离。


小智 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)

现在,如果您使用文件,您应该知道使用文件是一项非常昂贵的操作,即访问文件比访问内存花费更多的时间,而且我们也不必每次都执行文件操作。因此,程序员创建了一个称为缓冲区的新功能,它是计算机内存的一部分,临时存储数据以处理文件。

假设每次读取数据时,在读取文件的地方,您只是读取临时复制文件所有数据的某个内存位置。现在,由于您正在读取内存而不是文件,因此这将是一项较便宜的任务。

那些具有工作缓冲区的流(即打开文件并默认将文件的所有数据复制到缓冲区)称为缓冲流,而那些不使用任何缓冲区的流称为非缓冲流。

现在,如果您将数据输入到缓冲流中,那么该数据将排队直到流不被刷新(刷新意味着用文件的数据替换缓冲区的数据)。无缓冲流的工作速度更快(从流一端的用户角度来看),因为数据不会临时存储到缓冲区中,而是在到达流时发送到文件。