📅  最后修改于: 2023-12-03 15:01:30.563000             🧑  作者: Mango
BufferedInputStream
类是 Java 中的一种输入流,它提供了一个缓冲区来提高读取数据的效率。当从输入流中读取数据时,BufferedInputStream
会一次读取一块数据,并将其存储在内部缓冲区中。然后,当应用程序需要访问数据时,它会从缓冲区中读取,这样就避免了每次读取一个字节的开销。
BufferedInputStream
是 InputStream
类的一个装饰器类,在 InputStream
的基础上添加了缓冲区的功能。它可用于提高读取数据的性能,特别是当应用程序需要连续读取大量数据时。
要使用 BufferedInputStream
,首先需要创建一个输入流对象,然后再将其传递给 BufferedInputStream
的构造函数。以下是创建 BufferedInputStream
的一些常见方式:
// 从文件创建 BufferedInputStream
InputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
// 从网络连接创建 BufferedInputStream
InputStream inputStream = socket.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
// 从其他输入流创建 BufferedInputStream
BufferedInputStream bufferedInputStream = new BufferedInputStream(otherInputStream);
创建 BufferedInputStream
后,就可以使用其提供的方法来读取数据了。以下是一些常见的方法:
int bytesRead = bufferedInputStream.read(); // 读取一个字节,返回读取的字节数据,若已到达流的末尾,则返回 -1
byte[] buffer = new byte[1024];
int bytesRead = bufferedInputStream.read(buffer); // 读取多个字节,将数据存储在指定的字节数组中,并返回实际读取的字节数
boolean markSupported = bufferedInputStream.markSupported(); // 检查输入流是否支持标记操作
bufferedInputStream.mark(1024); // 在当前位置设置标记,允许后续调用 reset() 方法来返回该位置
bufferedInputStream.reset(); // 将流的位置重置为最近的标记位置
void close() throws IOException; // 关闭输入流及其关联的资源
以下是一个使用 BufferedInputStream
读取文件内容的示例代码:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) {
try {
InputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
System.out.write(buffer, 0, bytesRead);
}
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述示例中,我们创建了一个 BufferedInputStream
来读取名为 "file.txt" 的文件内容,并使用 System.out.write()
将读取的数据输出到控制台。
BufferedInputStream
是用于提高数据读取性能的输入流类。它通过使用一个内部缓冲区来减少对底层输入流的实际读取次数,从而提高了读取大量数据时的性能。使用 BufferedInputStream
可以减少 I/O 操作的开销,特别是当从文件或网络中读取数据时。