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

lớp BufferedOutputStream của gói java.io phần mềm được sử dụng với các dòng sản lượng khác để ghi dữ liệu (tính theo byte) một cách hiệu quả hơn.

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

1. Hoạt động của BufferedOutputStream

Nó BufferedOutputStream duy trì một bộ đệm bên trong 8192 byte .

Trong quá trình ghi, các byte được ghi vào bộ đệm bên trong thay vì đĩa. Khi bộ đệm được lấp đầy hoặc luồng bị đóng, toàn bộ bộ đệm sẽ được ghi vào đĩa.

Do đó, số lượng thông tin liên lạc đến đĩa bị giảm. Đây là lý do tại sao viết byte nhanh hơn khi sử dụng BufferedOutputStream.

2. Tạo một dòng BufferedOutputStream

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

// Creates a FileOutputStream
FileOutputStream file = new FileOutputStream(String path);

// Creates a BufferedOutputStream
BufferedOutputStream buffer = new BufferOutputStream(file);

Trong ví dụ trên, chúng tôi đã tạo ra một BufferdOutputStream tên đệm với cái FileOutputStream tên tập tin.

Ở đây, bộ đệm bên trong có kích thước mặc định là 8192 byte. Tuy nhiên, chúng tôi cũng có thể chỉ định kích thước của bộ đệm bên trong.

// Creates a BufferedOutputStream with specified size internal buffer
BufferedOutputStream buffer = new BufferOutputStream(file, int size);

Các đệm sẽ giúp ghi byte vào tệp nhanh hơn.

3. Phương thức BufferedOutputStream

lớp BufferedOutputStream cung cấp triển khai cho các phương pháp khác nhau trong lớp OutputStream.

3.1 phương thức viết

  • write() – ghi một byte đơn vào bộ đệm bên trong của 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

3.2 Ví dụ: BufferedOutputStream để ghi dữ liệu vào tệp

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;

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

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

        try {
            // Creates a FileOutputStream
            FileOutputStream file = new FileOutputStream("output.txt");

            // Creates a BufferedOutputStream
            BufferedOutputStream output = new BufferedOutputStream(file);

            byte[] array = data.getBytes();

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

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

Trong ví dụ trên, chúng tôi đã tạo một luồng đầu ra được đệm có tên đầu racùng với FileOutputStream. Luồng đầu ra được liên kết với tệp output.txt .

FileOutputStream file = new FileOutputStream("output.txt");
BufferedOutputStream output = new BufferedOutputStream(file);

Để ghi dữ liệu vào tệp, chúng tôi đã sử dụng phương thức write().

Ở đây khi chúng tôi chạy chương trình, tệp output.txt chứa đầy nội dung sau.

This is a line of text inside the file.

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

4. phương thức flush()

Để xóa bộ đệm bên trong, chúng ta có thể sử dụng phương thức flush(). Phương thức này buộc luồng đầu ra ghi tất cả dữ liệu có trong bộ đệm vào tệp đích. Ví dụ,

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;

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

        String data = "This is a demo of the flush method";

        try {
            // Creates a FileOutputStream
            FileOutputStream file = new FileOutputStream(" flush.txt");

            // Creates a BufferedOutputStream
            BufferedOutputStream buffer = new BufferedOutputStream(file);

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

            // Flushes data to the destination
            buffer.flush();
            System.out.println("Data is flushed to the file.");
            buffer.close();
        }

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

Đầu ra

Data is flushed to the file.

Khi chúng ta chạy chương trình, tệp flush.txt được điền bằng văn bản được biểu thị bằng chuỗi dữ liệu.

4.1 phương thức close()

Để đóng luồng đầu ra được đệm, chúng ta có thể sử dụng phương thức close(). Khi phương thức được gọi, chúng ta không thể sử dụng luồng đầu ra để ghi dữ liệu.

Để tìm hiểu thêm, hãy truy cập Java BufferedOutputStream (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!