Trong hướng dẫn này, chúng ta sẽ tìm hiểu về ByteArrayOutputStream trong Java và các phương thức của nó với sự trợ giúp của các ví dụ.

Các lớp ByteArrayOutputStream của gói java.io có thể được sử dụng để viết một loạt các dữ liệu đầu ra (theo byte).

Nó mở rộng lớp OutputStream trừu tượng.

Lưu ý : Trong ByteArrayOutputStream duy trì một mảng byte bên trong để lưu trữ dữ liệu.

1. Tạo ByteArrayOutputStream

Để tạo luồng đầu ra mảng byte, trước tiên chúng ta phải nhập gói java.io.ByteArrayOutputStream. Khi chúng ta nhập gói, đây là cách chúng ta có thể tạo luồng đầu ra.

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

Ở đây, chúng ta đã tạo một luồng đầu ra sẽ ghi dữ liệu vào một mảng byte với kích thước mặc định là 32 byte. Tuy nhiên, chúng ta có thể thay đổi kích thước mặc định của mảng.

// Creating a ByteArrayOutputStream with specified size
ByteArrayOutputStream out = new ByteArrayOutputStream(int size);

Đây, kích thước xác định độ dài của mảng.

2. Phương thức của ByteArrayOutputStream

lớp ByteArrayOutputStream cung cấp cho việc thực hiện các phương thức khác nhau hiện diện trong lớp OutputStream.

2.1 phương thức Viết

  • write(int byte) – ghi byte được chỉ định vào luồng đầu ra
  • write(byte[] array) – ghi các byte từ mảng được chỉ định vào luồng đầu ra
  • write(byte[] arr, int start, int length) – ghi số byte bằng chiều dài đến luồng đầu ra từ một mảng bắt đầu từ vị trí khởi đầu
  • writeTo(ByteArrayOutputStream out1) – ghi toàn bộ dữ liệu của luồng đầu ra hiện tại vào luồng đầu ra được chỉ định

2.3 Ví dụ: ByteArrayOutputStream để ghi dữ liệu

import java.io.ByteArrayOutputStream;

class Main {
  public static void main(String[] args) {

    String data = "This is a line of text inside the string.";

    try {
      // Creates an output stream
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      byte[] array = data.getBytes();

      // Writes data to the output stream
      out.write(array);

      // Retrieves data from the output stream in string format
      String streamData = out.toString();
      System.out.println("Output stream: " + streamData);

      out.close();
    }

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

Đầu ra

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

Trong ví dụ trên, chúng ta đã tạo một luồng đầu ra mảng byte có tên đầu ra.

Để ghi dữ liệu vào luồng đầu ra, chúng tôi đã sử dụng phương thức.

 write()

Lưu ý : getBytes()Phương thức được sử dụng trong chương trình chuyển đổi một chuỗi thành một mảng byte.

2.4 Truy cập dữ liệu từ ByteArrayOutputStream

  • toByteArray() – trả về mảng hiện diện bên trong luồng đầu ra
  • toString() – trả về toàn bộ dữ liệu của luồng đầu ra ở dạng chuỗi

Ví dụ,

ByteArrayOutputStream output = new ByteArrayOutputStream();import java.io.ByteArrayOutputStream;

class Main {
  public static void main(String[] args) {
    String data = "This is data.";

    try {
      // Creates an output stream
      ByteArrayOutputStream out = new ByteArrayOutputStream();

      // Writes data to the output stream
      out.write(data.getBytes());

      // Returns an array of bytes
      byte[] byteData = out.toByteArray();
      System.out.print("Data using toByteArray(): ");
      for(int i=0; i<byteData.length; i++) {
        System.out.print((char)byteData[i]);
      }

      // Returns a string
      String stringData = out.toString();
      System.out.println("\nData using toString(): " + stringData);

      out.close();
    }

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

Đầu ra

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

Trong ví dụ trên, chúng ta đã tạo một mảng byte để lưu trữ dữ liệu được phương thức toByteArray() trả về .

Sau đó, chúng tôi đã sử dụng vòng lặp for để truy cập từng byte từ mảng. Ở đây, mỗi byte được chuyển đổi thành ký tự tương ứng bằng cách sử dụng cách đánh máy.

2.5 phương thức close()

Để đóng luồng đầu ra, chúng ta có thể sử dụng phương thức close().

Tuy nhiên, phương thức  close()không có hiệu lực trong lớp ByteArrayOutputStream. Chúng ta có thể sử dụng các phương thức của lớp này ngay cả sau khi close()phương thức được gọi.

3. Các phương thức khác của ByteArrayOutputStream

Phương thứcMô tả
size()trả về kích thước của mảng trong luồng đầu ra
flush()xóa luồng đầu ra

Để tìm hiểu thêm, hãy truy cập Java ByteArrayOutputStream (tài liệu Java chính thức) .

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!