Please consider this request to override the `java.io.InputStream` methods 
`readAllBytes()` and `readNBytes(int)` in `FileInputStream` with more 
performant implementations. The method overrides attempt to read all requested 
bytes into a single array of the required size rather than composing the result 
from a sequence of smaller arrays. An example of the performance improvements 
is as follows.

**readAllBytes**
Before

Benchmark                                    (length)   Mode  Cnt      Score    
 Error  Units
ReadAllBytes.readAllBytesFileInputStream      1000000  thrpt   20   2412.031 ±  
 7.309  ops/s
ReadAllBytes.readAllBytesFileInputStream     10000000  thrpt   20    212.181 ±  
 0.369  ops/s
ReadAllBytes.readAllBytesFileInputStream    100000000  thrpt   20     19.860 ±  
 0.048  ops/s
ReadAllBytes.readAllBytesFileInputStream   1000000000  thrpt   20      1.298 ±  
 0.183  ops/s

After

Benchmark                                    (length)   Mode  Cnt      Score    
 Error  Units
ReadAllBytes.readAllBytesFileInputStream      1000000  thrpt   20   8218.473 ±  
43.425  ops/s
ReadAllBytes.readAllBytesFileInputStream     10000000  thrpt   20    302.781 ±  
 1.273  ops/s
ReadAllBytes.readAllBytesFileInputStream    100000000  thrpt   20     22.461 ±  
 0.084  ops/s
ReadAllBytes.readAllBytesFileInputStream   1000000000  thrpt   20      1.502 ±  
 0.003  ops/s


**readNBytes**

`N = file_size / 2`

Before

Benchmark                                    (length)   Mode  Cnt      Score    
 Error  Units
ReadAllBytes.readHalfBytesFileInputStream     1000000  thrpt   20   5585.500 ± 
153.353  ops/s
ReadAllBytes.readHalfBytesFileInputStream    10000000  thrpt   20    436.164 ±  
 1.104  ops/s
ReadAllBytes.readHalfBytesFileInputStream   100000000  thrpt   20     40.167 ±  
 0.141  ops/s
ReadAllBytes.readHalfBytesFileInputStream  1000000000  thrpt   20      3.291 ±  
 0.211  ops/s


After

Benchmark                                    (length)   Mode  Cnt      Score    
 Error  Units
ReadAllBytes.readHalfBytesFileInputStream     1000000  thrpt   20  15463.210 ±  
66.045  ops/s
ReadAllBytes.readHalfBytesFileInputStream    10000000  thrpt   20    561.752 ±  
 0.951  ops/s
ReadAllBytes.readHalfBytesFileInputStream   100000000  thrpt   20     45.043 ±  
 0.102  ops/s
ReadAllBytes.readHalfBytesFileInputStream  1000000000  thrpt   20      4.629 ±  
 0.035  ops/s

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

Commit messages:
 - 8264777: Overload optimized FileInputStream::readAllBytes

Changes: https://git.openjdk.java.net/jdk/pull/3845/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8264777
  Stats: 221 lines in 4 files changed: 215 ins; 1 del; 5 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3845.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3845/head:pull/3845

PR: https://git.openjdk.java.net/jdk/pull/3845

Reply via email to