原文: https://www.programiz.com/java-programming/bytearrayoutputstream

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

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

它扩展了OutputStream抽象类。

Java `ByteArrayOutputStream`类 - 图1

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


创建一个ByteArrayOutputStream

为了创建字节数组输出流,我们必须首先导入java.io.ByteArrayOutputStream包。 导入包后,就可以创建输出流。

  1. // Creates a ByteArrayOutputStream with default size
  2. ByteArrayOutputStream out = new ByteArrayOutputStream();

在这里,我们创建了一个输出流,它将数据写入默认大小为 32 个字节的字节数组中。 但是,我们可以更改数组的默认大小。

  1. // Creating a ByteArrayOutputStream with specified size
  2. 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写入数据

  1. import java.io.ByteArrayOutputStream;
  2. class Main {
  3. public static void main(String[] args) {
  4. String data = "This is a line of text inside the string.";
  5. try {
  6. // Creates an output stream
  7. ByteArrayOutputStream out = new ByteArrayOutputStream();
  8. byte[] array = data.getBytes();
  9. // Writes data to the output stream
  10. out.write(array);
  11. // Retrieves data from the output stream in string format
  12. String streamData = out.toString();
  13. System.out.println("Output stream: " + streamData);
  14. out.close();
  15. }
  16. catch(Exception e) {
  17. e.getStackTrace();
  18. }
  19. }
  20. }

输出

  1. Output stream: This is a line of text inside the string.

在上面的示例中,我们创建了一个名为output的字节数组输出流。

  1. ByteArrayOutputStream output = new ByteArrayOutputStream();

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

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


ByteArrayOutputStream访问数据

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

例如,

  1. import java.io.ByteArrayOutputStream;
  2. class Main {
  3. public static void main(String[] args) {
  4. String data = "This is data.";
  5. try {
  6. // Creates an output stream
  7. ByteArrayOutputStream out = new ByteArrayOutputStream();
  8. // Writes data to the output stream
  9. out.write(data.getBytes());
  10. // Returns an array of bytes
  11. byte[] byteData = out.toByteArray();
  12. System.out.print("Data using toByteArray(): ");
  13. for(int i=0; i<byteData.length; i++) {
  14. System.out.print((char)byteData[i]);
  15. }
  16. // Returns a string
  17. String stringData = out.toString();
  18. System.out.println("\nData using toString(): " + stringData);
  19. out.close();
  20. }
  21. catch(Exception e) {
  22. e.getStackTrace();
  23. }
  24. }
  25. }

输出

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

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

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


close()方法

要关闭输出流,可以使用close()方法。

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


ByteArrayOutputStream的其他方法

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

要了解更多信息,请访问 Java ByteArrayOutputStream(Java 官方文档)