Optimizing InputStream.skip(long)

David Holmes david.holmes at oracle.com
Sun Oct 10 23:52:16 UTC 2021


This belongs on core-libs-dev at openjdk.java.net


On 11/10/2021 9:39 am, - wrote:
> On GitHub, xenoamess sent a pull request [1] that optimizes skipBuffer
> array used by InputStream.skip by caching one for each InputStream
> instance (static ones are unsafe per bug 7000600) like the
> java.io.Reader class does (the reader one is behind a lock, while this
> one is possibly concurrent).
> Pros: Input streams that inherit the default skip logic can reduce
> buffer array creation by reusing the compatible old array when the
> skip method is called multiple times.
> Cons: This adds a field to InputStream; the array cannot be GC'd until
> the InputStream is GC'd. (But it has a length limit and the impact is
> less)
> Additional Info: Most JDK InputStream implementations already
> overrides this method to offer a more efficient implementation as
> suggested in the Javadocs. Reader.skip(long) calls Reader.read(char[],
> int, int), and this change doesn't affect the Reader class.
> I wonder if this idea is worthy of a JDK issue so this patch may
> eventually be accepted. Feel free to post any feedback, too!
> [1]: https://git.openjdk.java.net/jdk/pull/5872

More information about the jdk-dev mailing list