Lớp BufferedOutputStream
(Lớp BufferedOutputStream)
Lớp BufferedOutputStream trong Java là một lớp lớp bao bọc (wrapper class) được sử dụng để cải thiện hiệu suất ghi dữ liệu vào một luồng byte bằng cách sử dụng bộ đệm. Đây là một phần của gói java.io và kế thừa từ lớp FilterOutputStream. Cũng giống như BufferedInputStream, nó hoạt động bằng cách đệm một lượng dữ liệu nhất định trong bộ nhớ đệm, giúp giảm thiểu số lần truy cập vào nguồn dữ liệu đích, từ đó tăng tốc độ ghi.
Khai báo lớp BufferedOutputStream trong Java
Để sử dụng lớp BufferedOutputStream, bạn cần import gói java.io bạn cần thêm câu lệnh import vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để thực hiện các hoạt động nhập xuất (I/O) trong Java.
Cú pháp câu lệnh import:
Cú pháp
import java.io.BufferedOutputStream;
Cú pháp khai báo lớp BufferedOutputStream:
Cú pháp
public class BufferedOutputStream
extends FilterOutputStream
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public class BufferedOutputStream: Đây là khai báo một lớp công khai (public) tên là BufferedOutputStream. Lớp này có thể được truy cập từ bất kỳ đâu trong dự án Java, miễn là nó được import hoặc ở cùng gói.
↳ extends FilterOutputStream: Lớp BufferedOutputStream kế thừa từ lớp BufferedOutputStream. FilterOutputStream là một lớp cơ sở (superclass) trong Java cung cấp cơ chế để thêm tính năng hoặc cải thiện chức năng của luồng đầu ra byte. Lớp này có thể "lọc" (filter) các hoạt động của luồng đầu ra bằng cách bao bọc một luồng đầu ra byte khác.
Các trường trong lớp BufferedOutputStream
Lớp BufferedOutputStream sử dụng hai trường chính để quản lý dữ liệu được viết vào bộ đệm:
↳ protected byte[] buf: buf là một mảng byte (byte[]), được sử dụng làm bộ đệm (buffer) nội bộ trong lớp BufferedOutputStream. Bộ đệm này lưu trữ dữ liệu tạm thời trước khi được ghi ra đích cuối cùng (như tập tin hoặc mạng).
↳ protected int count: count là một biến số nguyên (int) lưu trữ số byte hợp lệ hiện có trong bộ đệm (buf). count cho biết số lượng byte dữ liệu đã được ghi vào bộ đệm và chưa được ghi ra đích cuối cùng.
Các constructor của lớp BufferedOutputStream
Lớp BufferedOutputStream cung cấp hai constructor để tạo đối tượng và thiết lập kích thước bộ đệm:
↳ BufferedOutputStream(OutputStream out): Tạo một BufferedOutputStream với kích thước bộ đệm mặc định, sử dụng luồng đầu ra out làm đích để ghi dữ liệu.
↳ BufferedOutputStream(OutputStream out, int size): Tạo một BufferedOutputStream với kích thước bộ đệm được chỉ định, sử dụng luồng đầu ra out làm đích để ghi dữ liệu.
Các phương thức của lớp BufferedOutputStream
Các phương thức trong BufferedOutputStream cung cấp nhiều cách để ghi dữ liệu vào một luồng. Bạn có thể sử dụng chúng để ghi dữ liệu một cách hiệu quả nhờ bộ đệm, giảm số lần truy cập hệ thống I/O, và đảm bảo rằng dữ liệu được xả (flush) đầy đủ vào luồng. Dưới đây là danh sách tất cả các phương thức của lớp BufferedOutputStream trong Java:
↳ void flush(): Buộc ghi dữ liệu còn lại trong bộ đệm ra luồng đích.
↳ void write(byte[] b, int off, int len): Ghi một phần của một mảng byte vào bộ đệm.
↳ void write(int b): Ghi một byte vào bộ đệm.
Dưới đây là một số ví dụ về cách sử dụng lớp BufferedOutputStream trong Java để ghi dữ liệu vào tập tin hoặc luồng đầu ra khác với sự tối ưu hóa nhờ bộ đệm.
Ví dụ 1: Ghi dữ liệu vào tập tin
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) {
// Tạo đối tượng BufferedOutputStream với FileOutputStream
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Example.txt"))) {
String data = "Ví Dụ 1: Ghi Dữ Liệu Vào Tập Tin";
bos.write(data.getBytes()); // Ghi dữ liệu vào tập tin
} catch (IOException e) {
e.printStackTrace();
}
}
}
Khi chạy chương trình, một tệp tin tên là Example.txt sẽ được tạo ra với nội dung:
Ví dụ 2: Ghi dữ liệu nhiều dò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[] lines = {"First line", "Second line", "Third line"};
for (String line : lines) {
bos.write(line.getBytes());
bos.write(System.lineSeparator().getBytes()); // Thêm ký tự xuống dòng
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Khi chạy chương trình, một tệp tin tên là Example.txt sẽ được tạo ra với nội dung:
Second line
Third line
Hy vọng rằng qua hai ví dụ trên, bạn sẽ hiểu rõ hơn về lớp BufferedOutputStream trong Java.