> 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

Brian Burkhalter has updated the pull request incrementally with one additional 
commit since the last revision:

  8264777: Change length == 0 case to fall back to superclass method; add 
dimensions to OutOfMemoryError message

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3845/files
  - new: https://git.openjdk.java.net/jdk/pull/3845/files/98a03a55..bfc5598b

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=01-02

  Stats: 29 lines in 1 file changed: 8 ins; 11 del; 10 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