Java ByteArrayOutputStream 类
1.ByteArrayOutputStream 概念:Java 中的 ByteArrayOutputStream
类用于将输出数据(字节形式)写入数组,属于 java.io
包,并扩展了 OutputStream
类。
2.创建和使用 ByteArrayOutputStream:创 建 ByteArrayOutputStream
时可以指定内部数组的大小,默认为 32 字节。主要方法包括 write()
用于写入字节,toByteArray()
和 toString()
用于从流中获取数据。
3.ByteArrayOutputStream 的特点:维护一个内部字节数组来存储数据,close()
方法在此类中无效,即使关闭后也可继续使用。提供了 size()
和 flush()
等其他有用的方法。
java.io
包中的 ByteArrayOutputStream
类可以用于将输出数据(以字节形式)写入一个数组。
它扩展了抽象类 OutputStream
。
注意:ByteArrayOutputStream
维护了一个内部字节数组来存储数据。
创建 ByteArrayOutputStream
为了创建字节数组输出流,我们首先必须导入 java.io.ByteArrayOutputStream
包。一旦我们导入了包,就可以按照下面的方法创建输出流。
// 创建一个默认大小的 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
这里,我们创建了一个将数据写入默认大小为 32 字节的字节数组的输出流。然而,我们可以改变数组的默认大小。
// 创建一个指定大小的 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream(int size);
这里的 size
指定了数组的长度。
ByteArrayOutputStream 的方法
ByteArrayOutputStream
类提供了 OutputStream
类中不同方法的实现。
write() 方法
write(int byte)
- 将指定的字节写入输出流write(byte[] array)
- 将指定数组中的字节写入输出流write(byte[] arr, int start, int length)
- 从数组的start
位置开始,将等于length
的字节数写入输出流writeTo(ByteArrayOutputStream out1)
- 将当前输出流的全部数据写入指定的输出流
示例:使用 ByteArrayOutputStream 写入数据
import java.io.ByteArrayOutputStream;
class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the string.";
try {
// 创建一个输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] array = data.getBytes();
// 将数据写入输出流
out.write(array);
// 以字符串格式从输出流中检索数据
String streamData = out.toString();
System.out.println("输出流: " + streamData);
out.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
输出
输出流: This is a line of text inside the string.
在上述示例中,我们创建了一个名为 output
的字节数组输出流。
ByteArrayOutputStream output = new ByteArrayOutputStream();
为了将数据写入输出流,我们使用了 write()
方法。
注意:程序中使用的 getBytes()
方法将字符串转换为字节数组。
从 ByteArrayOutputStream 中获取数据
toByteArray()
- 返回输出流中的数组toString()
- 以字符串形式返回输出流的全部数据
例如,
import java.io.ByteArrayOutputStream;
class Main {
public static void main(String[] args) {
String data = "This is data.";
try {
// 创建一个输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 将数据写入输出流
out.write(data.getBytes());
// 返回一个字节数组
byte[] byteData = out.toByteArray();
System.out.print("使用 toByteArray() 获取的数据:");
for(int i=0; i<byteData.length; i++) {
System.out.print((char)byteData[i]);
}
// 返回一个字符串
String stringData = out.toString();
System.out.println("\n使用 toString() 获取的数据:" + stringData);
out.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
输出
使用 toByteArray() 获取的数据:This is data.
使用 toString() 获取的数据:This is data.
在上述示例中,我们创建了一个字节数组来存储 toByteArray()
方法返回的数据。
然后我们使用了 for 循环来访问数组中的每一个字节。这里,每个字节通过类型转换被转换成相应的字符。
close() 方法
要关闭输出流,我们可以使用 close()
方法。
然而,在 ByteArrayOutputStream
类中,close()
方法没有效果。即使在调用了 close()
方法之后,我们也可以使用这个类的方法。
ByteArrayOutputStream 的其他方法
方法 | 描述 |
---|---|
size() | 返回输出流中数组的大小 |
flush() | 清除输出流 |
要了解更多,请访问 Java ByteArrayOutputStream (官方 Java 文档)。