RFR: 8320971: Use BufferedInputStream.buf directly when param of implTransferTo() is trusted

Alan Bateman alanb at openjdk.org
Wed Nov 29 20:02:07 UTC 2023


On Wed, 29 Nov 2023 11:57:37 GMT, Sergey Tsypanov <stsypanov at openjdk.org> wrote:

> It looks like we can skip copying of `byte[]` in `BufferedInputStream.implTransferTo()` for `OutputStreams` residing in `java.io`.
> 
> See comment by @vlsi in https://github.com/openjdk/jdk/pull/10525/files#diff-e19c508d1bb6ee78697ecca66947c395adda0d9c49a85bf696e677ecbd977af1R612

src/java.base/share/classes/java/io/BufferedInputStream.java line 647:

> 645:             if (avail > 0) {
> 646:                 // trust all OutputStreams from java.io
> 647:                 if (out.getClass().getPackageName() == BufferedInputStream.class.getPackageName()) {

I don't think Class::getPackageName documents that the returned String is intern so I wonder if the == check will lead to questions and suggestions of a bug. Classes with names starting with "java." can only be defined to the boot or platform class loader (details in the ClassLoader API docs) so you could just check if the package name equals "java.io".

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16879#discussion_r1409802437


More information about the core-libs-dev mailing list