Java IO là nền tảng quan trọng để hiểu việc đọc/ghi file, lập trình mạng, Netty, RPC framework và server hiệu năng cao. Khi học IO, bạn nên đồng thời hiểu Java API, IO model của hệ điều hành và các design pattern phổ biến để có thể kết nối BIO, NIO, AIO, Selector, Channel, Buffer và Reactor.
Giới thiệu về IO stream
IO là viết tắt của Input/Output, nghĩa là input và output. Quá trình đưa dữ liệu vào memory của máy tính là input; ngược lại, quá trình đưa dữ liệu ra external storage (chẳng hạn database, file, remote host) là output. Quá trình truyền dữ liệu tương tự dòng nước, vì vậy được gọi là IO stream. Trong Java, IO stream được chia thành input stream và output stream; dựa theo cách xử lý dữ liệu, chúng lại được chia thành byte stream và character stream.
Trong bài này, chúng ta cùng xem qua những ứng dụng của các design pattern có thể học được từ IO.
Decorator pattern
Decorator pattern có thể mở rộng chức năng của object mà không thay đổi object ban đầu.
Decorator pattern dùng composition thay cho inheritance để mở rộng chức năng của class ban đầu, nên phù hợp hơn trong những trường hợp quan hệ inheritance tương đối phức tạp (quan hệ inheritance giữa các class trong IO cũng khá phức tạp).
Phần mô hình IO thực sự khá khó hiểu vì cần quá nhiều kiến thức về tầng dưới của máy tính. Tôi đã mất khá nhiều thời gian để viết bài này và rất mong có thể trình bày những gì mình biết. Hy vọng bạn sẽ thu hoạch được điều gì đó! Để viết bài này, tôi còn xem lại cuốn 《UNIX Network Programming》, khó thật đấy, trời ơi! Đau lòng~
Trước khi học NIO, bạn cần nắm kiến thức lý thuyết cơ bản về các mô hình I/O của máy tính. Nếu chưa rõ, bạn có thể tham khảo bài viết tôi đã viết: Giải thích chi tiết mô hình Java IO.
