Java ByteArrayInputStream 类
提示
- ByteArrayInputStream的作用:
ByteArrayInputStream
类位于java.io
包中,用于从字节数组中以字节形式读取数据,扩展自InputStream
类。 - 创建ByteArrayInputStream:创建此类的对象时 ,可以指定整个数组或数组的一部分作为数据源。
- ByteArrayInputStream的主要方法:包括
read()
读取数据,available()
返回可用字节数,skip()
跳过字节,以及close()
关闭流(虽然在此类中没有实际效果)。
java.io
包中的 ByteArrayInputStream
类可以用于读取输入数据数组(以字节形式)。
它扩展了抽象类 InputStream
。
注意:在 ByteArrayInputStream
中,输入流是使用字节数组创建的。它包含一个内部数组来存储该特定字节数组的数据。
创建 ByteArrayInputStream
为了创建字节数组输入流,我们首先必须导入 java.io.ByteArrayInputStream
包。一旦我们导入了包,就可以按照下面的方法创建输入流。
// 创建一个读取整个数组的 ByteArrayInputStream
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);
这里,我们创建了一个从 arr
数组中读取全部数据的输入流。然而,我们也可以创建只从数组中读取部分数据的输入流。
// 创建一个读取数组部分数据的 ByteArrayInputStream
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);
这里的输入流从数组的 start
位置开始,读取等于 length
的字节数。
ByteArrayInputStream 的方法
ByteArrayInputStream
类为 InputStream
类中的不同方法提供了实现。
read() 方法
read()
- 从输入流中的数组读取单个字节read(byte[] array)
- 从输入流读取字节并存储在指定数组中read(byte[] array, int start, int length)
- 从流中读取等于length
的字节数,并从start
位置开始存储在指定数组中
示例:使用 ByteArrayInputStream 读取数据
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("从输入流中读取的字节:");
for(int i= 0; i < array.length; i++) {
// 读取字节
int data = input.read();
System.out.print(data + ", ");
}
input.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
输出
从输入流中读取的字节:1, 2, 3, 4,
在上述示例中,我们创建了一个名为 input
的字节数组输入流。
ByteArrayInputStream input = new ByteArrayInputStream(array);
这里,输入流包含了指定数组的所有数据。为了从输入流中读取数据,我们使用 了 read()
方法。
available() 方法
要获取输入流中可用的字节数,我们可以使用 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("开始时可用的字节数:" + input.available());
// 从输入流中读取 2 个字节
input.read();
input.read();
// 返回结束时可用的字节数
System.out.println("结束时可用的字节数:" + input.available());
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
输出
开始时可用的字节数:4
结束时可用的字节数:2
在上述示例中,
- 我们使用了
available()
方法来检查输入流中可用的字节数。 - 然后,我们使用了
read()
方法两次来从输入流中读取 2 个字节。 - 现在,在读取了这 2 个字节之后,我们再次检查了可用的字节数。这次可用的字节数减少了 2 个。
skip() 方法
要舍弃并跳过指定数量的字节,我们可以使用 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);
// 使用 skip() 方法
input.skip(2);
System.out.print("跳过 2 个字节后的输入流:");
int data = input.read();
while (data != -1) {
System.out.print(data + ", ");
data = input.read();
}
// close() 方法
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
输出
跳过 2 个字节后的输入流:3, 4,
在上述示例中,我们使用了 skip()
方法从输入流中跳过了 2 个字节的数据。因此 1
和 2
没有从输入流中被读取。
close() 方法
要关闭输入流,我们可以使用 close()
方法。
然而,在 ByteArrayInputStream
类中,close()
方法没有效果。即使在调用了 close()
方法之后,我们也可以使用这个类的方法。
ByteArrayInputStream 的其他方法
方法 | 描述 |
---|---|
finalize() | 确保调用了 close() 方法 |
mark() | 标记输入流中已读取数据的位置 |
reset() | 将控制权返回到输入流中设置标记的点 |
markSupported() | 检查输入流是否支持 mark() 和 reset() 方法 |
要了解更多,请访问 Java ByteArrayInputStream (官方 Java 文档)。