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

Difference between InputStream.read(byte b) and BufferedInputStream in Java

我刚刚看到 InputStream (link to Java 11 API) class 有一个方法 read(byte[] b) 可以按字节方式读取数据流。这不就是一种“缓冲阅读”吗?

我进一步看到,BufferedInputStreamlink to Java 11 API) 没有自己的 read(byte[] b) 实现。它正在使用其父 class FilterInputStream.

那么,InputStream class 是否也支持缓冲读取? class BufferedInputStream 的区别在哪里?

编辑

将“read(byte b)”更正为“read(byte[] b)”。

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

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

BufferedInputStream 提供的附加功能是对 markreset 方法的支持,这有效地允许您在流中为一个点添加书签并从该书签重新读取.缓冲区维护支持此操作所需的字节。否则,它将只读取当时可用的内容,没有任何缓冲。

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

你可以看看这个optimization example