Runtime AtlasJava platform fieldbook
Java · Language to RuntimeView Markdown source

I/O, NIO, files, and serialization

I/O crosses an application boundary and therefore needs limits, cleanup, and validation.

Bytes and characters

Input/output streams work with bytes. Readers/writers work with characters and need a charset. Specify UTF-8 or the protocol charset; do not rely on platform defaults for persistent data.

Buffering reduces expensive small system calls. Files and Path provide modern file operations. Many directory and line streams are lazy resources that must be closed.

NIO

NIO includes paths, channels, buffers, selectors, asynchronous channels, and memory-mapped files. A ByteBuffer has capacity, position, and limit. flip changes from writing data into the buffer to reading it out.

Safe file processing

Validate file size and type, avoid following unexpected symbolic links, prevent path traversal, write to a temporary file, sync when durability requires it, and atomically move into place where supported. Limit decompression to prevent zip bombs.

Object serialization

Native Java serialization has long-term compatibility and security risks. Do not deserialize untrusted data. Prefer explicit formats such as JSON, Protocol Buffers, or a well-designed binary contract. If legacy serialization is unavoidable, apply serialization filters and strict type boundaries.

HTTP client

The JDK HttpClient supports HTTP/1.1, HTTP/2, synchronous and asynchronous calls. Reuse clients, set connect/request timeouts, bound body sizes, validate TLS and redirects, and handle interruption.

Feynman check

Bytes are sealed packages; a charset is the translation guide that turns packages into letters. A buffer is a tray with a marker showing where writing or reading happens next.

Runtime AtlasIndependent study material · verify production details in official Java documentation