Tổng kết module — I/O & NIO
Tóm tắt module I/O & NIO: chọn đúng API giữa java.io, NIO.2, serialization và stream file lớn. Self-assessment 5 năng lực trước khi sang JVM Internals.
Bạn vừa đi hết module I/O & NIO — từ stream cổ điển tới xử lý file 10GB. Điểm mấu chốt của cả module: Java có nhiều tầng API cho cùng một việc, và giá trị nằm ở chỗ chọn đúng tầng cho workload trước mặt, cùng giải thích được cơ chế bên dưới để debug khi có sự cố.
Nhìn lại từng bài
- 01. Stream cổ điển —
java.iochia 2 nhánh byte/char, thiết kế theo decorator pattern (ghép wrapper cho buffer/decode/decompress). Buffer cắt số syscall hàng nghìn lần; charset phải luôn explicit để tránh bug latent trên Windows. - 02. Path và Files — NIO.2 thay
java.io.Filecũ:Pathimmutable +Filesutility gói 90% task file I/O hằng ngày (readString,write,copy,move) trong vài dòng, với exception cụ thể. - 03. Duyệt thư mục và Watch —
Files.walk/walkFileTreeđi qua cây thư mục (nhớ close stream), pattern atomic swap để ghi file không bao giờ để lại trạng thái nửa vời,WatchServicetheo dõi thay đổi (event-driven trên Linux/Windows; macOS fallback về polling). - 04. Serialization — cơ chế — Java biến object thành byte qua marker interface + reflection;
serialVersionUIDkiểm version,transientbỏ field khỏi serialize, customwriteObject/readObjectđể encrypt/validate. - 05. Deserialization — RCE và alternatives —
readObjecttrên input không tin biến thành remote code execution qua gadget chain. Phòng chống bằngObjectInputFilter(JEP 290, allowlist), và tốt hơn là chuyển sang JSON/Protobuf. - 06. Stream file lớn —
Files.linesxử lý file 10GB lazy không OOM;MappedByteBuffercho random access;FileChannel+ByteBufferkhi cần control chi tiết. - 07. Mini-challenge: Log aggregator — ghép walk + stream + collector thành tool xử lý log production: đọc nhiều file, parse robust, aggregate thống kê, ghi report.
Bản đồ quyết định — chọn API nào
flowchart TD
A["Can lam gi voi file?"] --> B["Doc/ghi ca file nho"]
A --> C["File lon / stream"]
A --> D["Luu object Java"]
B --> B1["Files.readString"]
C --> C1["Files.lines"]
C --> C2["MappedByteBuffer"]
C --> C3["FileChannel"]
D --> D1["JSON / Protobuf"]
D --> D2["Native + ObjectInputFilter"]✅ Self-assessment
Bạn đã đạt module này nếu tự tin trả lời được từng câu:
- Explain mô hình I/O của
java.io— hai nhánh byte/char, decorator pattern, và vì sao buffering cắt giảm syscall - Implement thao tác file thường ngày bằng NIO.2
Path/Filesvà duyệt cây thư mục vớiFiles.walk - Explain cơ chế Java native serialization —
serialVersionUID,transient, và customwriteObject/readObject - Diagnose lỗ hổng deserialization RCE (gadget chain) và chọn phòng chống bằng
ObjectInputFilterhoặc JSON/Protobuf - Choose đúng API xử lý file lớn (
Files.lines,MappedByteBuffer,FileChannel) theo workload để không OOM
Còn câu nào chưa chắc, quay lại bài tương ứng ở phần "Nhìn lại từng bài" phía trên.
Module tiếp theo — JVM Internals: Class loader — JVM tìm và nạp class thế nào. Hiểu cỗ máy bên dưới để debug khi production đi sai.
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên