我刚刚看到InputStream
(link to Java 11 API)类具有方法read(byte[] b)
来按字节读取数据流。那不是一种“缓冲阅读”吗?
我还看到BufferedInputStream
(link to Java 11 API)没有自己的read(byte[] b)
实现。它使用其父类FilterInputStream
的方法。
那么InputStream
类还支持缓冲读取吗?和类BufferedInputStream
有什么区别?
感谢您的帮助!
编辑:
已将“ read(byte b)
”更正为“ read(byte[] b)
”。
答案 0 :(得分:2)
我假设您的意思是byte[] b
,而不是byte b
。
根据Javadoc,read(byte[] b)
的默认实现是简单地调用read(b, 0, b.length)
。由于此方法在BufferedInputStream
中已被覆盖,因此可以说read(byte[] b)
在所有意图和目的上也都被覆盖。
BufferedInputStream
提供的附加功能是对mark
和reset
方法的支持,这有效地使您可以为流中的点添加书签并从该书签中重新读取。缓冲区维护支持此操作所需的字节。否则,它将仅读取当时可用的内容,而不会进行任何缓冲。
答案 1 :(得分:1)
所以 InputStream 是一个接口,BufferedInputStream 是一个实现。 BufferedInputStream 环绕另一个 InputStream,如 FileInputStream 并缓冲数据。 BufferedInputStream 的作用是在返回之前收集多个字节块,以便您可以一次读取更大的数据块以提高性能。
您可以查看此optimization example。