> 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