"Xin chào, Amigo! Hôm nay, Ellie đã nói với bạn về mẫu bộ điều hợp."

Hầu hết các lớp liên quan đến luồng I/O được triển khai dưới dạng bộ điều hợp. Họ có thể chuyển đổi các giao diện tương đương hoặc kết nối chúng, bắt đầu từ giao diện đơn giản và tiến dần lên phức tạp.

"Có phải InputStreamReaderBufferedReader cũng là bộ điều hợp không? Ít nhất, chúng rất giống với bộ điều hợp theo cách chúng được sử dụng: Sau khi một đối tượng được tạo, nó được chuyển đến hàm tạo của một lớp khác."

"Có, InputStreamReader chuyển đổi giao diện InputStream thành giao diện Reader . BufferedReader không phải là bộ điều hợp ở dạng thuần túy nhất, bởi vì những người tạo Java đã quyết định không cung cấp cho các phương thức của nó giao diện riêng. Nhưng đó là tinh thần đồng điệu."

Thay vì viết hàng tỷ lớp khác nhau, những người tạo ra Java đã viết hai chục bộ điều hợp và cho phép chúng kết nối với nhau theo cách mà một lập trình viên có thể muốn.

Cách tiếp cận này rất thuận tiện. Một lập trình viên luôn có thể viết lớp và/hoặc bộ điều hợp của mình, yêu cầu nó triển khai một giao diện tiêu chuẩn và đưa nó vào chuỗi các đối tượng bộ điều hợp mà cô ấy đang xây dựng.

"Vì vậy, đó là cách mọi thứ hoạt động. Thay vì các lớp lớn phức tạp, chúng tôi tạo chuỗi các đối tượng và bộ điều hợp đơn giản. Sau đó, bạn chỉ cần tạo chúng và kết hợp chúng theo đúng thứ tự!"

"Và bạn thực hiện bất cứ điều gì còn thiếu."

"Vâng, tôi hiểu rồi."

"Nhưng thực ra hôm nay tôi muốn nói với các bạn về ReaderWriter . Đây là hai lớp trừu tượng rất giống với các lớp InputStream và OutputStream. Nhưng khác với các lớp đó, hai lớp này làm việc với các ký tự. Chúng đọc và viết các ký tự. Chúng là rất thuận tiện khi làm việc với thông tin văn bản. Hãy cùng xem các phương thức mà chúng có:"

phương pháp đọc Phương pháp làm gì
int read(char[] cbuf);
"Phương pháp này ngay lập tức đọc một số ký tự vào bộ đệm ( mảng char ), cho đến khi bộ đệm đầy hoặc cho đến khi nguồn không còn ký tự nào để đọc."
Phương thức trả về số ký tự thực sự được đọc (có thể nhỏ hơn độ dài của mảng)
int read();
"Phương thức này đọc một ký tự và trả về ký tự đó. Kết quả được mở rộng thành một kiểu int. Nếu không có ký tự khả dụng nào, thì phương thức này trả về -1."
boolean ready();
Phương thức này trả về true nếu có bất kỳ ký tự chưa đọc nào đối với phương thức đã đọc
void close();
Phương thức này «đóng» luồng. Bạn gọi điều này khi bạn làm việc xong với luồng.
Sau đó, đối tượng thực hiện các thao tác quản lý cần thiết để đóng tệp, v.v.
Tại thời điểm này, bạn không thể đọc thêm bất kỳ dữ liệu nào từ luồng.

"Hóa ra là phương thức read(char [] cbuf) của Reader cho phép chúng tôi đọc toàn bộ khối ký tự, thay vì từng ký tự một. Vì vậy, nó nhanh hơn và thuận tiện hơn."

"Chính xác. Và bây giờ hãy xem những phương pháp mà Writer có:"

Phương pháp Phương pháp làm gì
void write(int c);
Phương pháp này viết một ký tự. Loại int được thu hẹp thành char. Phần bổ sung chỉ đơn giản là loại bỏ.
void write(char[] cbuff);
Phương thức này viết một mảng ký tự.
void write(String s);
Phương thức này viết một chuỗi. Nó đơn giản được chuyển đổi thành một mảng ký tự và sau đó phương thức thứ hai được gọi.
void flush();
Nếu luồng đang lưu trữ nội bộ bất kỳ dữ liệu nào chưa được ghi, thì phương thức này buộc nó phải được ghi.
void close();
Phương thức này «đóng» luồng. Bạn gọi điều này khi bạn làm việc xong với luồng.
Sau đó, đối tượng thực hiện các thao tác quản lý cần thiết để đóng tệp, v.v. Bạn không thể ghi dữ liệu vào luồng nữa và chức năng xả được gọi tự động.

Điều quan trọng là phải hiểu rằng ReaderWriter là các lớp trừu tượng. Chúng không làm bất cứ điều gì và hầu như không chứa mã. Tất cả các phương thức của chúng sẽ cần được triển khai trong các lớp kế thừa chúng. Công việc của họ là chuẩn hóa cách các lớp tương tác với nhau . Các nhà phát triển không cần phải phát minh ra các tiêu chuẩn của riêng họ để tương tác với nhau. Sẽ thuận tiện hơn nhiều cho mọi người nếu duy trì một vài tiêu chuẩn cơ bản. Điều này cho phép các lớp được viết bởi các lập trình viên khác nhau dễ dàng tương tác không chỉ với các lớp được viết bởi những người tạo ra Java mà còn với các lớp được viết bởi các lập trình viên khác.

Tiêu chuẩn là mạnh mẽ.

"Tôi đồng ý. Ủng hộ các tiêu chuẩn chung có lợi cho tất cả mọi người."