RFR: 8279283 - BufferedInputStream should override transferTo [v7]
Markus KARG
duke at openjdk.org
Tue Sep 6 12:34:46 UTC 2022
On Tue, 6 Sep 2022 12:14:37 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> With the changes you proposed a CSR will definitely be needed.
>
> BIS dates from JDK 1.0 and it's not hard to find examples that extend it. The HexPrinter test reminds us that it has been possible for 25+ years to override the read methods and snoop on all bytes that are read. Adding an override of the transferTo method that bypasses the read methods might break these subclasses. So I think Daniel is right that we have to be cautious.
>
> So I think the feedback that you have now is that bypassing the buffer is problematic when using mark, when there are buffered bytes, or when BIS has been extended. It may be that the starting point is something very conservative like this:
>
>
> @Override
> public long transferTo(OutputStream out) throws IOException {
> if (getClass() == BufferedInputStream.class
> && ((count - pos) <= 0) && (markpos == -1)) {
> return getInIfOpen().transferTo(out);
> } else {
> return super.transferTo(out);
> }
> }
>
>
> There is also the issue of locking and async close to look into.
Thank you for your decision about this issue, so instead of fixing the existing bugs I will implement as you outlined.
BTW, locking and rebasing is on the way.
-------------
PR: https://git.openjdk.org/jdk/pull/6935
More information about the core-libs-dev
mailing list