Java 如何使用BufferedInputStream读取多个字节

Java 如何使用BufferedInputStream读取多个字节,java,Java,这是我文字中的一段准确引述: The purpose of I/O buffering is to improve system performance. Rather than reading a byte at a time, a large number of bytes are read together the first time the read() method is invoked. 但是,当我使用BufferedInputStream.read()时,我所能做的就是得到

这是我文字中的一段准确引述:

The purpose of I/O buffering is to improve system performance. 
Rather than reading a byte at a time, a large number of bytes are read together 
the first time the read() method is invoked.

但是,当我使用BufferedInputStream.read()时,我所能做的就是得到一个字节。我做错了什么?我需要做什么?

不是你,而是一次读取多个字符的流。
BufferedInputStream
保留一个缓冲区,下次调用
read()
时,将返回该缓冲区中的下一个字节,而不访问物理驱动器(除非缓冲区为空且必须将下一个数据块读入缓冲区)


请注意,有些方法的读取量超过一个字节,但这些方法实际上与您在问题中明确要求的差异无关。

BufferedInputStream类有助于缓冲输入流。与从网络或磁盘一次读取一个字节不同,您一次读取一个更大的数据块

可以使用以下构造函数设置BufferedInputStream内部使用的缓冲区大小

InputStream input = new BufferedInputStream(new FileInputStream("PathOfFile"), 2 * 1024);
此示例将缓冲区大小设置为2 KB


创建BufferedInputStream时,将创建一个内部缓冲区数组。当读取或跳过流中的字节时,会根据需要从包含的输入流中重新填充内部缓冲区,一次填充许多字节

从技术上讲,您不需要做任何事情—对
read()
的大多数调用都会耗尽内部缓冲区,而不是每次都进行系统调用,因此缓冲区会为您处理。您还可以查看以获得更有用的方法。那么如何访问缓冲区中的数据?对缓冲区的引用在哪里?你不直接——它是从你那里抽象出来的。访问缓冲区的方式与使用“普通”输入流的方式相同。缓冲区中的引用隐藏在
BufferedInputStream
类中。那么我该如何处理它呢?比如把它输出到某个地方?关键是你不需要做任何特殊的事情。您可以简单地将其视为增强常规
InputStream
的性能。没有必要区别对待。不应该有直接访问缓冲区的理由。