Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8292937

Improve performance of some read operations of RandomAccessFile

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • None
    • core-libs
    • None

      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

            stsypanov Sergey Tsypanov
            stsypanov Sergey Tsypanov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: