Currently some operations of RandomAccessFile are implemented with multiple read() invocations:
public final int readInt() throws IOException { int ch1 = this.read(); int ch2 = this.read(); int ch3 = this.read(); int ch4 = this.read(); if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); } This can be improved by using bulk reads: public final int readInt() throws IOException { readFully(readBuffer, 0, 4); return Bits.getInt(readBuffer, 0); } Benchmarking: baselile Benchmark (kiloBytes) Mode Cnt Score Error Units RandomAccessFileReadBenchmark.readInt 1 avgt 10 1060,526 ± 62,036 us/op RandomAccessFileReadBenchmark.readInt 5 avgt 10 5745,671 ± 1374,277 us/op RandomAccessFileReadBenchmark.readLong 1 avgt 10 1399,494 ± 378,072 us/op RandomAccessFileReadBenchmark.readLong 5 avgt 10 4864,425 ± 329,282 us/op RandomAccessFileReadBenchmark.readShort 1 avgt 10 1111,163 ± 70,883 us/op RandomAccessFileReadBenchmark.readShort 5 avgt 10 4933,058 ± 339,273 us/op patch Benchmark (kiloBytes) Mode Cnt Score Error Units RandomAccessFileReadBenchmark.readInt 1 avgt 10 311,404 ± 17,337 us/op RandomAccessFileReadBenchmark.readInt 5 avgt 10 1210,381 ± 22,742 us/op RandomAccessFileReadBenchmark.readLong 1 avgt 10 201,726 ± 8,885 us/op RandomAccessFileReadBenchmark.readLong 5 avgt 10 667,117 ± 6,779 us/op RandomAccessFileReadBenchmark.readShort 1 avgt 10 560,259 ± 16,783 us/op RandomAccessFileReadBenchmark.readShort 5 avgt 10 2251,975 ± 54,533 us/op ------------- Commit messages: - 8292937: Fix copyright - 8292937: Improve performance of some read operations of RandomAccessFile Changes: https://git.openjdk.org/jdk/pull/10031/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10031&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8292937 Stats: 129 lines in 3 files changed: 96 ins; 22 del; 11 mod Patch: https://git.openjdk.org/jdk/pull/10031.diff Fetch: git fetch https://git.openjdk.org/jdk pull/10031/head:pull/10031 PR: https://git.openjdk.org/jdk/pull/10031