Buffer.[set|write]Bytes
doesn't respect length when reading from InputStream
#2389
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation:
Javadoc for
Buffer.writeBytes
andBuffer.setBytes
says it reads"length bytes have been read, the end of stream is reached, or an
exception is thrown". However, its internal implementation in Netty
does only a single
InputStream.read(byte[], int, int)
invocation.InputStream
contract does not guarantee to read the whole requestedlength
, it says "reads up to len bytes of data from the input stream".There are implementations that may return less than
len
bytes on asingle read attempt.
Modifications:
NettyBuffer
keeps reading from theInputStream
until length byteshave been read;
writeBytesUntilEndStream
bcz it's a custommethod that does not exist in Netty;
Result:
Buffer.writeBytes
andBuffer.setBytes
behave according to theirjavadoc when reading from
InputStream
.