On Thu, 23 Mar 2023 19:27:04 GMT, Sergey Tsypanov <stsypa...@openjdk.org> wrote:

>> By default `BufferedInputStream` is constructed with internal buffer with 
>> capacity 8192. In some cases this buffer is never used, e.g. when we call 
>> `IS.readNBytes()` or `IS.readAllBytes()` (relying on `BIS.read1()`) or when 
>> `BufferedInputStream` is cascaded.
>
> Sergey Tsypanov has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Update src/java.base/share/classes/java/io/BufferedInputStream.java
>   
>   Co-authored-by: liach <7806504+li...@users.noreply.github.com>

So something like this?


byte[] buffer;
byte[] allocated;
do {
    buffer = buf;
    if (buffer == null) {
        throw new IOException("Stream closed");
    }
    if (buffer == EMPTY) {
        if (allocated == null) {
            allocated = new byte[size];
        }
        // defend against asynchronous close
        if (U.compareAndSetReference(this, BUF_OFFSET, EMPTY, allocated) {
            return allocated;
        } else {
            continue;
        }
    }
    return buffer;
}

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

PR Comment: https://git.openjdk.org/jdk/pull/13150#issuecomment-1481844595

Reply via email to