8
在Java和C#中有几个缓冲流类: BufferedStream
C#,Buffered(Input|Output)Stream
和Buffered(Reader|Writer)
。缓冲流如何工作?
它们在构造函数中获取一些流并实现相同的接口。
问题是 - 它是如何工作的?
当我试图读取一个字节时会发生什么?它将大量字节读入内部缓冲区,然后在字节后将其返回给我字节?在写一个字节?写入内部缓冲区并在flush()
写入内部流?
关于读取/写入字节数组 - 在缓冲流上执行操作效率不高,因为将字节复制到内部数组或从内部数组复制?
因此,如果我正在读取大量字节并希望在字节后读取它们的字节,而不是考虑读入缓冲区,那么缓冲流是有用的?如果我想将一个字节数组手动读入我的缓冲区,那么这种方法是无用的吗? – VorobeY1326
如果您的数据源有一些请求开销,并且您想要限制请求数,缓冲流将非常有用。一个硬盘大约需要1/120秒才能完全旋转,所以如果你逐个字符地检索120个字符,最糟糕的情况是可能需要一秒钟。但是,如果您一次检索所有120个字符,则可以在一次旋转中完成。当然,你可以创建自己的缓冲区,但为什么要重新发明轮子? –
请注意,.NET中的FileStream已经被充分缓冲以用于硬盘。如果您正在从套接字读取TCP数据包,则只需要'BufferedStream'或类似的东西。 –