Lớp Trừu Tượng Writer
(Abstract Class Writer)
Lớp Writer trong Java là một lớp trừu tượng nằm trong gói java.io, đại diện cho một luồng ghi ký tự (character stream). Lớp này cung cấp các phương thức cơ bản để ghi dữ liệu ký tự vào các đích khác nhau như tệp, chuỗi, hoặc luồng đầu ra. Tương tự như Reader, Writer là lớp trừu tượng, nên bạn không thể tạo một đối tượng từ lớp này trực tiếp, mà phải sử dụng các lớp con cụ thể.
Các lớp con phải cài đặt ít nhất ba phương thức: write(char[], int, int), flush() và close().
Cú pháp khai báo lớp trừu tượng Writer:
Cú pháp
public abstract class Writer
extends Object
implements Appendable, Closeable, Flushable
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public: Từ khóa public cho biết lớp Writer có thể được truy cập từ bất kỳ đâu trong chương trình. Điều này có nghĩa là lớp Writer có thể được sử dụng bởi các lớp và gói khác mà không bị giới hạn quyền truy cập.
↳ abstract: Lớp Writer được khai báo là lớp trừu tượng. Điều này có nghĩa là bạn không thể tạo đối tượng trực tiếp từ lớp Writer. Thay vào đó, bạn cần sử dụng các lớp con cụ thể của Writer để thực hiện các chức năng ghi ký tự. Lớp trừu tượng có thể chứa các phương thức trừu tượng (chưa được định nghĩa) mà các lớp con phải triển khai. Nó cũng có thể chứa các phương thức đã được định nghĩa sẵn.
↳ class Writer: Từ khóa class chỉ định rằng Writer là một lớp trong Java, và nó là một lớp trừu tượng cung cấp các phương thức cơ bản để ghi dữ liệu ký tự.
↳ extends Object: Lớp Writer kế thừa từ lớp Object, lớp cha cơ bản của tất cả các lớp trong Java. Mọi lớp trong Java tự động kế thừa từ Object nếu không có lớp cha nào khác được chỉ định. Điều này có nghĩa là lớp Writer cũng kế thừa các phương thức cơ bản của lớp Object, chẳng hạn như toString(), equals(), và hashCode().
Lớp Writer thực hiện các giao diện Appendable, Closeable, và Flushable. Điều này có nghĩa là lớp Writer phải cung cấp định nghĩa cho tất cả các phương thức trừu tượng trong các giao diện này, hoặc các lớp con của Writer phải thực hiện các giao diện này.
↳ implements Appendable: Appendable là một giao diện trong Java với phương thức append(CharSequence csq). Giao diện này cho phép lớp thực hiện khả năng thêm dữ liệu vào một đích (ví dụ: thêm ký tự vào một chuỗi).
↳ implements Closeable: Closeable là một giao diện trong Java với phương thức close(). Giao diện này yêu cầu lớp thực hiện phải cung cấp một cơ chế để đóng tài nguyên khi không còn sử dụng, nhằm ngăn ngừa rò rỉ tài nguyên.
↳ implements Flushable: Flushable là một giao diện trong Java với phương thức flush(). Giao diện này yêu cầu lớp thực hiện phải có khả năng đẩy mọi dữ liệu còn lại trong bộ đệm ra luồng đầu ra.
Trường của lớp trừu tượng Writer
Lớp Writer chỉ có một trường duy nhất. Trường lock được sử dụng để đảm bảo rằng chỉ một luồng có thể truy cập vào luồng ký tự tại một thời điểm, tránh các vấn đề đồng bộ hóa.
↳ protected Object lock: Một đối tượng được sử dụng để đồng bộ hóa các hoạt động trên luồng này.
Các constructor của lớp trừu tượng Writer
Lớp Reader có hai constructor chính để tạo đối tượng. Lớp Writer là một lớp trừu tượng, nên các constructor của nó được khai báo với quyền truy cập protected.
↳ protected Writer(): Tạo một đối tượng Writer mới với các phần đồng bộ hóa được thực hiện trên chính đối tượng Writer.
↳ protected Writer(Object lock): Tạo một đối tượng Writer mới với các phần đồng bộ hóa được thực hiện trên đối tượng lock được truyền vào.
Các phương thức của lớp trừu tượng Writer
Các phương thức của lớp Writer trong Java cung cấp chức năng cơ bản để ghi dữ liệu vào luồng đầu ra, từ ghi một ký tự đơn lẻ đến ghi nhiều ký tự cùng lúc. Ngoài ra, còn có các phương thức để đẩy dữ liệu còn lại trong bộ đệm ra luồng, và đóng luồng sau khi sử dụng. Dưới đây là danh sách tất cả các phương thức của lớp Writer trong Java:
↳ Writer append(char c): Nối thêm một ký tự vào luồng.
↳ Writer append(CharSequence csq): Nối thêm một chuỗi ký tự vào luồng.
↳ Writer append(CharSequence csq, int start, int end): Nối thêm một phần của chuỗi ký tự vào luồng.
↳ abstract void close(): Đóng luồng và giải phóng tài nguyên.
↳ abstract void flush(): Buộc ghi dữ liệu đệm ra luồng đích.
↳ void write(char[] cbuf): Ghi một mảng ký tự vào luồng.
↳ abstract void write(char[] cbuf, int off, int len): Ghi một phần của mảng ký tự vào luồng.
↳ void write(int c): Ghi một ký tự vào luồng.
↳ void write(String str): Ghi một chuỗi vào luồng.
↳ void write(String str, int off, int len): Ghi một phần của chuỗi vào luồng.
Các lớp con kế thừa trực tiếp từ lớp trừu tượng Writer trong Java
Các lớp con của Writer mở rộng khả năng ghi dữ liệu đến nhiều đích khác nhau, cung cấp sự linh hoạt trong việc xử lý đầu ra. Dưới đây là danh sách các lớp con và các lớp liên quan đến Writer, cùng với mô tả ngắn gọn về từng lớp:
↳ BufferedWriter: Ghi dữ liệu ký tự với bộ đệm để cải thiện hiệu suất ghi.
↳ OutputStreamWriter: Chuyển đổi luồng ký tự thành luồng byte, thường được sử dụng với OutputStream.
↳ FileWriter: Kế thừa từ OutputStreamWriter, Ghi dữ liệu ký tự vào tệp văn bản.
↳ CharArrayWriter: Ghi dữ liệu vào mảng ký tự, dữ liệu có thể được lấy ra từ mảng sau khi ghi.
↳ FilterWriter: Lớp cơ sở cho các luồng ghi có bộ lọc, cho phép điều chỉnh dữ liệu trước khi ghi ra luồng.
↳ PipedWriter: Ghi dữ liệu vào luồng ống (pipe), thường được sử dụng trong giao tiếp giữa các luồng.
↳ PrintWriter: Cung cấp các phương thức tiện lợi để ghi dữ liệu dạng văn bản, như ghi số, chuỗi, và đối tượng.
↳ StringWriter: Ghi dữ liệu vào một chuỗi (string) trong bộ nhớ.

Bây giờ Chúng ta sẽ khám phá chi tiết từng lớp trong luồng ký tự trong Java, bao gồm các lớp chính được sử dụng để thực hiện các hoạt động đầu vào và đầu ra liên quan đến dữ liệu ký tự.