繁体   English   中英

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

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

我刚刚看到InputStream指向 Java 11 API 的链接)类有一个方法read(byte[] b)以字节方式读取数据流。 那不就是一种“缓冲阅读”吗?

我进一步看到, BufferedInputStreamJava 11 API 的链接)没有自己的read(byte[] b) 它使用其父类FilterInputStream的方法。

那么, InputStream类是否也支持缓冲读取呢? 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 的作用是在返回之前收集多个字节块,以便您可以一次读取更大的数据块以提高性能。

您可以查看此优化示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM