Optimizing Java File Compression: From Buffered Streams to NIO Channels, Memory‑Mapped Files and Pipes
This article demonstrates how to dramatically speed up Java file compression of multiple images by replacing naive FileInputStream reads with BufferedInputStream, then leveraging NIO Channels with transferTo, memory‑mapped files, and finally Pipe‑based streaming, showing performance improvements from 30 seconds down to about 1 second.
The original requirement was to receive ten photos from the frontend, compress them into a zip archive, and stream the result, but the naïve implementation using FileInputStream read byte‑by‑byte took about 30 seconds for a 20 MB file.
First optimization introduced BufferedInputStream (and BufferedOutputStream) to read larger blocks, reducing the time to roughly 2 seconds.
Second optimization switched to Java NIO by creating a FileChannel and using transferTo to copy directly between channels, cutting the time further to about 1.4 seconds.
Third optimization employed a memory‑mapped file via MappedByteBuffer, achieving a similar performance (~1.3 seconds) because the data is accessed through a direct buffer.
Fourth optimization demonstrated the use of a Pipe with asynchronous tasks, combining a writable channel for the zip output and a readable channel for the source file, providing another viable high‑performance solution.
All methods were measured with the same 20 MB test image, and the results show that proper buffering and NIO techniques can reduce compression time by more than an order of magnitude.
The article concludes that even simple optimizations deepen understanding of I/O internals, emphasizing the importance of applying learned concepts to solidify knowledge.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Architect's Tech Stack
Java backend, microservices, distributed systems, containerized programming, and more.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
