On Fri, 2 Jul 2021 18:43:36 GMT, Joe Wang <jo...@openjdk.org> wrote:

>> Both conditions of the statement are intended to be met. If the stream is at 
>> its end then
>> 
>>         if (pos >= count) {
>>             return -1;
>>         }
>> 
>> will cause `-1` to be returned because at end of stream the condition `pos 
>> >= count` is met.
>> 
>> The overridden method always returns `0` if `len == 0`.:
>> 
>> 
>>     public int read(byte b[], int off, int len) throws IOException {
>>         Objects.checkFromIndexSize(off, len, b.length);
>>         if (len == 0) {
>>             return 0;
>>         }
>
> Right. I understand. The intention was, unlike the overridden method that 
> returns 0 if len == 0 and -1 if at the end of the stream, this method returns 
> -1 in both cases. A careful reader, after comparing both methods, would 
> understand correctly that the difference is in the case of "len==0". I'm fine 
> if you think this is good enough. Just a thought though that the statement 
> could be interpreted as if both conditions need to be met at the same time 
> (if "and" is taken as "&&", e.g. if (pos>==count && len==0) ). 
> 
> Something like the following might be clearer?
>      * Unlike the {@link InputStream#read(byte[],int,int) overridden method}
>      * of {@code InputStream} that returns {@code -1} if the end of the stream
>      * has been reached and {@code 0} if {@code len == 0}, this method returns
>      * {@code -1} in both cases.
> 
> Just my 2 cents.

Thanks for the suggestion. I am happy with it as is, but I'll hold off 
integrating it for now and rethink it later.

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

PR: https://git.openjdk.java.net/jdk17/pull/189

Reply via email to