跳到主要内容

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 是 Java 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 文档)