> 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 one additional 
commit since the last revision:

  8292937: Get back to Java solution

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/10031/files
  - new: https://git.openjdk.org/jdk/pull/10031/files/9a9a0b04..42f6e862

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=10031&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=10031&range=04-05

  Stats: 84 lines in 5 files changed: 9 ins; 62 del; 13 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

Reply via email to