Open
Description
The use of an async ReadListener
allows the normal read methods to be used in async mode. However nowhere in the javadoc do we document how that behaviour is changed and I think they may be a few corner cases that are ambiguous:
- can the
ServletInputStream.readLine
method be used? Currently it has a default implementation that will fail in async mode asisReady()
is not called. Should implementations override this with a method that works asynchronously and returns 0 if a complete line is not available? Or should the default implementation be updated to throw ISE if there is a ReadListener? - Ditto for
readAllBytes()
andreadNBytes(...)
,skip(long)
,skipNBytes(long)
,transferTo(OutputStream)
: should they ISE, block or return null if insufficient data is available? - The javadoc of
isReady()
is very light on and really needs to make clear the scheduling implications of a false return - ie that one of theReadListener
callbacks will eventually be called if false is return. - If
read(byte[],int,int)
is called without previously callingisReady()
:- Should ISE always be thrown?
- Should ISE be thrown only if there is no data available?
- Should 0 be returned if there is no data available? If so, is this equivalent to a call to
isReady()
returning false? ie will a callback be scheduled when data is available?
- If
read(byte[],int,int)
is called afterisReady()
returns false andonDataAvailable
, should 0 be returned or ISE thrown? - If
read()
is called, then returning 0 is not an option as it is a valid byte. So how shouldread()
handle all of the situations above?