1

谷歌搜索并阅读了许多相关文章,但与使用流上的 read 方法一次读取相同数量的字节相比,我并不真正理解使用 bufferstream 的性能如何。据我了解,bufferstream 一次从源流中读取许多字节以节省往返行程。但这与使用 read(byte[], index, count) 有什么不同,其中 count = 使用缓冲流读取的相同字节数。请帮助我理解它。

4

2 回答 2

5

从多个数据源(例如文件)读取时,操作中最慢的部分通常是执行每个单独的读取请求。所以关键是减少说“给我来自源XXX的N字节数据”的请求数量。

在文件访问的情况下,执行 1 次 10 MB 的读取比执行 10 次 1 MB 的读取更有效率。

缓冲在幕后所做的比你要求的要多,预计你可能会在不久之后再次阅读。

因此,尽管您只取回了您要求的数据块,但其余的都存储在缓冲区中。这样,当你下一次请求数据时,你想要的数据往往已经在缓冲区中,对底层数据源的请求就更少了。

请注意,预读行为通常首先在创建缓冲区时执行,或者在执行第一个读取请求时执行。然后缓冲区将根据需要使用额外的预读来填充自己。

于 2013-11-11T04:03:03.500 回答
1

通常在处理数据流时,底层传输或媒体具有定义的数据包大小。这意味着您可以通过单个请求读取最少的数据量。例如,即使您读取 2 个字节,也会收到 1k 个数据包。

当您使用缓冲流时,当您请求 2 个字节时,您将获得 1K 的数据,如果您请求另外 2 个字节,它将来自缓冲区而不是发起另一个请求。

于 2013-11-11T04:14:09.750 回答