Java中InputStream.read(byte b)和BufferedInputStream之间的区别

时间:2018-12-29 17:10:16

标签: java inputstream bufferedinputstream

我刚刚看到InputStreamlink to Java 11 API)类具有方法read(byte[] b)来按字节读取数据流。那不是一种“缓冲阅读”吗?

我还看到BufferedInputStreamlink to Java 11 API)没有自己的read(byte[] b)实现。它使用其父类FilterInputStream的方法。

那么InputStream类还支持缓冲读取吗?和类BufferedInputStream有什么区别?

感谢您的帮助!

编辑: 已将“ read(byte b)”更正为“ read(byte[] b)”。

2 个答案:

答案 0 :(得分:2)

我假设您的意思是byte[] b,而不是byte b

根据Javadoc,read(byte[] b)的默认实现是简单地调用read(b, 0, b.length)。由于此方法在BufferedInputStream中已被覆盖,因此可以说read(byte[] b)在所有意图和目的上也都被覆盖。

BufferedInputStream提供的附加功能是对markreset方法的支持,这有效地使您可以为流中的点添加书签并从该书签中重新读取。缓冲区维护支持此操作所需的字节。否则,它将仅读取当时可用的内容,而不会进行任何缓冲。

答案 1 :(得分:1)

所以 InputStream 是一个接口,BufferedInputStream 是一个实现。 BufferedInputStream 环绕另一个 InputStream,如 FileInputStream 并缓冲数据。 BufferedInputStream 的作用是在返回之前收集多个字节块,以便您可以一次读取更大的数据块以提高性能。

您可以查看此optimization example