How SLOW can you read/write files in Java?

A common question on Stack Overflow is: Why is reading/writing from a file in Java so slow? What is the fastest way?

The discussion often revolves around comparing NIO versus IO. However, the bottleneck is usually not the read/write operations themselves, and the specific approach often has little significance in the bigger picture.

To demonstrate, I’ll show one of the simplest (and perhaps slowest) ways to read/write text, using PrintWriter and Files.lines(Path). The code is available here While it’s slower than writing binary using NIO or IO, it’s fast enough for most typical use cases.

Example Output

The program on a Ryzen 5950X running Linux outputs:

Run 1, Write speed: 0.900 GB/sec, read speed 0.832 GB/sec
Run 2, Write speed: 0.918 GB/sec, read speed 1.208 GB/sec
Run 3, Write speed: 0.933 GB/sec, read speed 1.197 GB/sec
    

If you find that 900 MB/s is more than fast enough for your application, the specific method of reading/writing data to disk shouldn't matter much.

Key Consideration

NOTE: For very large files, the performance depends significantly on the speed and configuration of your hardware, such as your disk drives. If you’re facing bottlenecks with large files, consider optimizing your hardware setup instead of blaming the software.

NOTE 2: I wrote an article on this topic in 2011, and at the time the write/read performance as just over 100 MB/s

Comments

Popular posts from this blog

Java is Very Fast, If You Don’t Create Many Objects

System wide unique nanosecond timestamps

Comparing Approaches to Durability in Low Latency Messaging Queues