Java ByteArrayInputStream 实战指南:从字节数组高效读取数据
Java ByteArrayInputStream
ByteArrayInputStream 位于 java.io,实现 InputStream,可将字节数组作为输入流处理。内部保存数组副本,支持随机访问和高效读取。
注意: 流从数组本身读取,非外部源,所有操作基于内存。
创建 ByteArrayInputStream
导入 java.io.ByteArrayInputStream 并实例化,可读整个数组或切片:
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);
第二个构造器从索引 start 读 length 字节。
核心方法
read()
int read()– 读下一字节,末尾返回-1int read(byte[] b)– 填充数组int read(byte[] b, int off, int len)– 从偏移off读最多len字节
示例:读取字节
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.print("Bytes read: ");
int value;
while ((value = input.read()) != -1) {
System.out.print(value + ", ");
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
Bytes read: 1, 2, 3, 4,
available()
返回无阻塞仍可读字节数。
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.println("Initially: " + input.available());
input.read(); input.read();
System.out.println("After 2 reads: " + input.available());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
Initially: 4 After 2 reads: 2
skip()
按指定字节数前移流位置。
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
input.skip(2);
System.out.print("After skip: ");
int value;
while ((value = input.read()) != -1) {
System.out.print(value + ", ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
After skip: 3, 4,
close()
关闭 ByteArrayInputStream 无实际效果;关闭后仍可使用。方法仅为 API 兼容性保留。
其他实用方法
| 方法 | 描述 |
|---|---|
mark(int readlimit) | 标记当前位置 |
reset() | 回到最后标记位置 |
markSupported() | 始终返回 true |
finalize() | 确保资源释放(本类无实际效果) |
完整 API 见 官方 Java 文档。
java
- 精通 Java 多维数组:二维 & 三维数组实战
- Java 数组复制技术:全面指南
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java Scanner:读取文本、数字与复杂类型的综合指南
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除