我对缓冲区的理解是否正确?

时间:2018-01-03 08:13:24

标签: c++ vector buffer bytebuffer

我最近一直在学习缓冲区,我想检查一下我是否理解它们。我必须以二进制格式读取文件,这会产生一系列字节。为了在我的程序中使用这些字节,我必须将它们存储在一个向量中,然后我可以遍历向量中的每个元素。

因此,缓冲区不是像矢量那样的实际数据类型,而是以更好/更易于访问的格式临时存储数据以便可以使用它。这个定义是否正确?我认为它没有任何区别,但我使用的语言是C ++。

1 个答案:

答案 0 :(得分:3)

我认为你已经适合这种特殊情况,你使用临时存储将字节读入内存,然后将其重新整形为程序所需的实际数据格式。

但是:术语缓冲区用于不同情境中的许多事情。

例如,缓冲区可以是用于从文件读入内存的内存,因此当源请求单个字符(或少量字节)时,运行时库不必一直向下进入OS内核以询问一个或少量字节,但是为一千字节或几千字节的数据分摊该开销。这通常隐藏在C或C ++运行时中。

在C ++中,std::stream的内部实现使用std::streambuf来处理文件I / O的低级缓冲机制。

在其他情况下,当系统忙于执行其他操作时,它会存储您的按键,直到应用程序有时间从键盘输入读取。

同样,在屏幕上显示实际视频内容之前,有缓冲区可以从互联网上读取视频流。因为如果视频播放器一次只请求几个字节,那么请求的开销会使播放非常紧张。

另一个例子是使用OpenCL(或者例如Cuda)来处理GPU上的一些数据的应用程序,并希望一些内存来存储数据,然后调用clCreateBuffer(..., size, ...)将返回一个内存对象来存储size个字节。

还有许多其他地方在计算机中使用术语缓冲区。 (并且在计算机以外的区域,例如化学[一种能够抵抗或有助于限制pH值变化的化合物]和火车[在运输结束时“碰撞停止”])。