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

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 workloadgiả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 --> G

Bạ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/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 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àiNội dungBạn làm được gì
01. Stream cổ điểnInputStream/Reader, decorator, buffering, charsetĐọc/ghi file đúng cách, tránh bug charset
02. Path và FilesNIO.2 Path immutable + Files utilityGói task file I/O hằng ngày trong vài dòng
03. Duyệt thư mục và WatchFiles.walk/walkFileTree, atomic swap, WatchServiceĐi qua cây thư mục, ghi file an toàn
04. Serialization — cơ chếMarker interface, serialVersionUID, transientGiải thích cách Java biến object thành byte
05. Deserialization — RCE và alternativesGadget chain, ObjectInputFilter, JSON/ProtobufNhận diện lỗ hổng và chọn cách an toàn
06. Stream file lớnFiles.lines, MappedByteBuffer, FileChannelXử lý file 10GB không OOM
07. Mini-challenge: Log aggregatorGhép walk + stream + collectorViế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

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

I/O cổ điển — InputStream, Reader, buffered wrapper