[英]JAVA: Byte array allocation in InputStream.read(byte[] b, int off, int len)
[英]Difference between InputStream.read(byte b) and BufferedInputStream in Java
我刚刚看到InputStream
( 指向 Java 11 API 的链接)类有一个方法read(byte[] b)
以字节方式读取数据流。 那不就是一种“缓冲阅读”吗?
我进一步看到, BufferedInputStream
( Java 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
提供的附加功能是对mark
和reset
方法的支持,这有效地允许您为流中的一个点添加书签并从该书签中重新读取。 缓冲区维护支持此操作所需的字节。 否则,它只会读取当时可用的内容,而无需任何缓冲。
所以InputStream是一个接口,而 BufferedInputStream 是一个实现。 BufferedInputStream 环绕另一个 InputStream,如 FileInputStream 并缓冲数据。 BufferedInputStream 的作用是在返回之前收集多个字节块,以便您可以一次读取更大的数据块以提高性能。
您可以查看此优化示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.