Java 菜鸟教程

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java 异常处理

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java ByteArrayOutputStream 类

在本教程中,我们将借助示例学习Java ByteArrayOutputStream及其方法。

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()方法。

但是,close()方法在ByteArrayOutputStream类中无效。即使调用了close()方法,我们也可以使用此类的方法。

ByteArrayOutputStream的其他方法

方法内容描述
size()返回输出流中数组的大小
flush()清除输出流