Tổng quan module — I/O & NIO
Bản đồ module I/O & NIO: từ stream cổ điển java.io, NIO.2 Path/Files, duyệt thư mục, serialization và mặt tối RCE, tới xử lý file lớn không OOM.
Mọi service thực tế đều đụng file: đọc config, ghi log, nhận upload, export report, nạp dataset. Java cho bạn nhiều tầng API làm cùng một việc — FileInputStream, BufferedReader, Files.readString, Files.lines, MappedByteBuffer, FileChannel — và chọn sai tầng thì code vừa chậm vừa dễ vỡ (leak file descriptor, OOM khi file 10GB, vỡ tiếng Việt trên Windows, thậm chí RCE khi deserialize input lạ).
Module này đi từ nền tảng java.io (thiết kế decorator, vì sao buffer quan trọng) sang NIO.2 hiện đại (Path/Files), rồi mổ serialization cùng lỗ hổng bảo mật của nó, và khép lại bằng kỹ thuật xử lý file lớn stream-based. Mục tiêu: bạn chọn đúng API cho từng workload và giải thích được cơ chế bên dưới để debug khi production đi sai.
Bản đồ module
flowchart TD
A["01. Stream co dien (java.io)"] --> B["02. Path va Files (NIO.2)"]
A --> D["04. Serialization co che"]
B --> C["03. Duyet thu muc + Watch"]
B --> F["06. Stream file lon"]
D --> E["05. Deserialization RCE + alternatives"]
C --> G["07. Mini-challenge: Log aggregator"]
F --> GBạn sẽ đạt được gì
Học xong module này, bạn có thể:
- 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 chuẩn bị trước
- Đã học xong course Java OO & Functional — đặc biệt là
try-with-resources(bài Exception handling) và Stream API, vì cả hai xuất hiện trong hầu hết mọi bài của module. - Biết cơ bản về syscall và bộ nhớ (đọc/ghi xuống kernel) — được nhắc lại tại chỗ khi cần.
Lộ trình bài học
| Bài | Nội dung | Bạn làm được gì |
|---|---|---|
| 01. Stream cổ điển | InputStream/Reader, decorator, buffering, charset | Đọc/ghi file đúng cách, tránh bug charset |
| 02. Path và Files | NIO.2 Path immutable + Files utility | Gói task file I/O hằng ngày trong vài dòng |
| 03. Duyệt thư mục và Watch | Files.walk/walkFileTree, atomic swap, WatchService | Đi qua cây thư mục, ghi file an toàn |
| 04. Serialization — cơ chế | Marker interface, serialVersionUID, transient | Giải thích cách Java biến object thành byte |
| 05. Deserialization — RCE và alternatives | Gadget chain, ObjectInputFilter, JSON/Protobuf | Nhận diện lỗ hổng và chọn cách an toàn |
| 06. Stream file lớn | Files.lines, MappedByteBuffer, FileChannel | Xử lý file 10GB không OOM |
| 07. Mini-challenge: Log aggregator | Ghép walk + stream + collector | Viết tool xử lý log production thực tế |
Bài tiếp theo: Stream cổ điển — InputStream, Reader, buffered wrapper
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