Xả Luồng Đệm
(Flushing Buffered Streams)

Xả luồng đệm (flushing) là hành động ghi dữ liệu trong bộ đệm ra ngay lập tức, thay vì chờ cho đến khi bộ đệm đầy. Điều này thường rất hữu ích khi bạn cần đảm bảo dữ liệu được ghi ra ở những thời điểm quan trọng.

Các điểm chính về xả bộ đệm

Xả bộ đệm:

↳ Xả bộ đệm buộc dữ liệu trong bộ đệm phải được ghi ra đích đến ngay lập tức, như ghi vào tập tin hoặc gửi qua mạng.

↳ Điều này đặc biệt quan trọng khi bạn cần chắc chắn rằng dữ liệu đã được ghi ra tại một thời điểm cụ thể, chẳng hạn khi ghi nhật ký (logging) hoặc hoàn thành một giao dịch.

Tự động xả (Autoflush):

↳ Một số lớp đầu ra có hỗ trợ tính năng tự động xả (autoflush), nghĩa là bộ đệm sẽ được tự động xả khi có sự kiện nhất định xảy ra.

↳ Ví dụ, với một đối tượng PrintWriter có tính năng tự động xả, mỗi khi gọi println hoặc format, bộ đệm sẽ tự động được xả.

↳ Tính năng tự động xả có thể được bật thông qua một tham số tùy chọn trong constructor.

Xả thủ công (Manual Flushing):

↳ Bạn có thể xả luồng đệm thủ công bằng cách gọi phương thức flush.

↳ Phương thức flush có sẵn trên tất cả các luồng đầu ra, nhưng nó chỉ có tác dụng nếu luồng đó được đệm.

Ví dụ về xả thủ công

Ví dụ: Example.java

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

public class Example {
    public static void main(String[] args) {
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Example.txt"))) {
            String data = "Đây là dữ liệu quan trọng.";
            bos.write(data.getBytes());  // Ghi dữ liệu vào bộ đệm

            // Xả bộ đệm thủ công
            bos.flush();
            
            // Sau khi xả, bạn vẫn có thể ghi thêm dữ liệu
            String moreData = " Thêm dữ liệu.";
            bos.write(moreData.getBytes()); 
            
            // Bộ đệm sẽ tự động xả khi luồng được đóng
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Trong ví dụ này, dữ liệu được ghi vào bộ đệm trước, sau đó phương thức flush() được gọi để đảm bảo rằng dữ liệu được ghi ra tập tin ngay lập tức. Sau khi xả, có thể tiếp tục ghi thêm dữ liệu vào bộ đệm. Bộ đệm sẽ tự động được xả khi luồng đóng.

Khi nào nên sử dụng xả bộ đêm?

↳ Sử dụng xả khi bạn cần xuất dữ liệu ra ngay lập tức, chẳng hạn trong trường hợp ghi nhật ký (logging), ghi dữ liệu quan trọng, hoặc khi ứng dụng có thể bị dừng đột ngột.

↳ Trong các ứng dụng mạng, xả giúp gửi dữ liệu ngay lập tức thay vì chờ đợi cho đến khi bộ đệm đầy.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”