掌握 Java BufferedInputStream:高效字节读取与进阶方法详解
Java BufferedInputStream 类概览
BufferedInputStream 位于 java.io,通过内部缓冲增强字节输入流,实现更快更高效的数据读取。继承抽象 InputStream。
BufferedInputStream 工作原理
默认维护 8,192 字节内部缓冲区。读操作时,从底层流(通常为文件)获取一块字节存入缓冲区。后续读调用从缓冲区消费字节,耗尽后再加载下一块。减少昂贵磁盘 I/O,加速数据消费。
创建 BufferedInputStream
导入类:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
包装低级流如 FileInputStream:
FileInputStream file = new FileInputStream("example.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
可指定自定义缓冲区大小:
int bufferSize = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(file, bufferSize);
缓冲区越大,磁盘访问越少——适合大文件或网络流。
BufferedInputStream 关键方法
read()
int read()– 读单字节,返回 0–255 整数或-1表示流结束int read(byte[] b)– 读最多b.length字节到数组int read(byte[] b, int off, int len)– 从偏移off读最多len字节到b
示例:逐字节读取文本文件并打印到控制台。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) {
int byteRead;
while ((byteRead = in.read()) != -1) {
System.out.print((char) byteRead);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
This is a line of text inside the file.
available()
available() 报告无阻塞可读字节数,可用于大流处理进度估算。
FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
System.out.println("Bytes available: " + buffer.available());
// ... 读取数据
System.out.println("Bytes remaining: " + buffer.available());
buffer.close();
skip(long n)
跳过指定字节数,返回实际跳过字节数(可能少于请求数,若到达流末尾)。
buffer.skip(5); // 跳过前 5 字节
close()
始终关闭流(推荐 try-with-resources)释放资源。关闭后不可复用。
其他重要方法
| 方法 | 描述 |
|---|---|
mark(int readLimit) | 标记流当前位置。后续 reset() 回到此点,前提是读取字节不超过 readLimit |
reset() | 将流重定位到最后标记位置 |
完整参考见 官方 Java 文档。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java BufferedReader:高效字符流处理实战指南
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除