> 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
Сергей Цыпанов has updated the pull request incrementally with two additional commits since the last revision: - 8292937: Fix exception - 8292937: Fix build on Windows ------------- Changes: - all: https://git.openjdk.org/jdk/pull/10031/files - new: https://git.openjdk.org/jdk/pull/10031/files/faae4fc5..defcad9b Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=10031&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=10031&range=01-02 Stats: 6 lines in 1 file changed: 0 ins; 0 del; 6 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