Java ByteArrayOutputStream 类用法说明及实例

本教程通过示例介绍 Java ByteArrayOutputStream 类以及使用方法。

本教程通过示例介绍 Java ByteArrayOutputStream 类以及使用方法。

java.io 包的 ByteArrayOutputStream 类可用于将数据以字节为单位写入输出字节数组。

ByteArrayOutputStream 类扩展了 OutputStream 抽象类。

ByteArrayOutputStream 是 Java OutputStream 的子类。
Java ByteArrayOutputStream 类

注意:在 ByteArrayOutputStream 内部维护一个字节数组来存储数据。

创建 ByteArrayOutputStream

ByteArrayOutputStream 类位于 java.io 包中,ByteArrayOutputStream 类提供了构造方法创建对象。如下:

ByteArrayOutputStream out = new ByteArrayOutputStream();

在这里,我们创建了一个字节数组输出流,默认大小为 32 字节。但是,我们也可以指定字节数组输出流的初始大小。如下:

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;

public 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("Output stream: " + streamData);

      out.close();
    } catch(Exception e) {
      e.getStackTrace();
    }
  }
}

输出

This is a line of text inside the string.

在上面的例子中,我们通过以下语句创建了一个名为 out 的字节数组输出流。

ByteArrayOutputStream output = new ByteArrayOutputStream();

然后,我们使用 write() 方法将数据写入输出流。

注意:程序中使用的 getBytes() 方法将字符串转换为字节数组。

获取 ByteArrayOutputStream 中的数据

  • toByteArray() - 返回存在于输出流中的字节数组
  • toString() - 以字符串形式返回输出流的全部数据

例如,

import java.io.ByteArrayOutputStream;

public 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("Data using toByteArray(): ");
      for(int i=0; i<byteData.length; i++) {
        System.out.println((char)byteData[i]);
      }

      String stringData = out.toString();
      System.out.println("Data using toString(): " + stringData);

      out.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Data using toByteArray(): This is data.
Data using toString(): This is data.

在上面的例子中,我们创建了一个字节数组 byteData 来存储 toByteArray() 方法返回的数据。

然后我们使用 for 循环访问数组中的每个字节,将每个字节都使用类型转换转换为相应的字符。

close() 方法

ByteArrayOutputStream 类的 close() 方法是个空方法,没有任何实际操作。因此,调用 close() 方法之后,我们仍然可以使用这个类的方法对输入流进行操作。

ByteArrayOutputStream 的其他方法

方法 说明
size() 返回输出流中数组的大小
flush() 刷新输出流