流和缓冲区之间的关系?

时间:2019-05-29 04:25:49

标签: c

我是一名新手程序员,您能帮助我想象一下什么是流吗?它是固定的字节数组,用于将数据从文件传输到Y吗? Y在这里是什么,缓冲区还是其他? 缓冲区与流有什么关系?

2 个答案:

答案 0 :(得分:2)

流是数据的源(输入流)或宿(输出流),它们在时间上(而不是一次全部)可用(或提供)。

缓冲区是一个数组(一块内存),用于临时存储数据。通常,OS从输入流中填充输入缓冲区。操作系统会占用一个输出缓冲区(由程序员填充一次)。

想象一下您想在浴缸里装满水。您首先需要一个水源,例如水箱或公共自来水厂,这些水源可以通过水龙头转移。您将一个水桶放在水龙头下,然后将其打开。桶装满后,将其倒入桶中,然后放回水龙头下。重复一遍,直到浴缸里装满水为止。

例如,加载文件的工作方式几乎相同。您有一个数据源(磁盘上的文件);您打开一个输入流(一种程序结构,通常可以像磁盘读取数据一样快地为您提供数据)。您分配一个缓冲区(较小的内存区域),并告诉系统从流中填充它。当已满时,将其附加到为文件内容保留的已分配内存的大块中,然后再次填充缓冲区。读取整个文件后,关闭流。

答案 1 :(得分:1)

缓冲区与流之间的差异是

是一系列字节的数据序列,用于将信息从指定的源传输或传输到指定的源。

流入程序的字节序列称为输入流。从程序流出的字节序列称为输出流 使用Stream使I / O机器独立。

缓冲区是存储在内存中的字节序列。

在C语言中,I / O操作是异步的:您不知道何时拥有数据,也不知道有多少数据。 因此通常使用缓冲区从流中收集数据(文件,套接字,设备)。当缓冲区已满时,将通知该流的使用者,并且可以消耗缓冲区中的数据直到耗尽。然后,等待缓冲区再次填充,然后再使用该数据。在这里暂时存储一些东西,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续将输出存储在缓冲区中。当使用者加速时,它可以从缓冲区读取。缓冲区位于中间以弥合间隙。

您的问题中的Y可以是文件,套接字或设备(I / O)。

希望这可以解决您的查询:)