Java Internals & Concurrency/Tổng kết module — I/O & NIO
46/75
Bài 46 / 75~5 phútI/O & NIOMiễn phí lượt xem

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ểnjava.io chia 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.File cũ: Path immutable + Files utility 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à WatchFiles.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, WatchService theo 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; serialVersionUID kiểm version, transient bỏ field khỏi serialize, custom writeObject/readObject để encrypt/validate.
  • 05. Deserialization — RCE và alternativesreadObject trên input không tin biến thành remote code execution qua gadget chain. Phòng chống bằng ObjectInputFilter (JEP 290, allowlist), và tốt hơn là chuyển sang JSON/Protobuf.
  • 06. Stream file lớnFiles.lines xử lý file 10GB lazy không OOM; MappedByteBuffer cho random access; FileChannel + ByteBuffer khi 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/Files và duyệt cây thư mục với Files.walk
  • Explain cơ chế Java native serialization — serialVersionUID, transient, và custom writeObject/readObject
  • Diagnose lỗ hổng deserialization RCE (gadget chain) và chọn phòng chống bằng ObjectInputFilter hoặ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

Đặt 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

Bài tiếp theo

Tổng quan module — JVM Internals