John Flavin created HTTPCORE-449:
------------------------------------
Summary: IdentityInputStream.available() erroneously returns 0
Key: HTTPCORE-449
URL: https://issues.apache.org/jira/browse/HTTPCORE-449
Project: HttpComponents HttpCore
Issue Type: Bug
Components: HttpCore
Affects Versions: 4.4.6, 4.4.5
Reporter: John Flavin
h5. BACKGROUND
I have an application that reads data from a stream. When data is available, I
can read from the stream perfectly fine. However, sometimes the stream will
remain open with no data, in which case reading from the stream blocks. I would
like to use the {{available()}} method on the stream to first check whether
anything can be read before attempting to read.
h5. PROBLEM
When I attempt to use the {{available()}} method on my {{InputStream}} instance
it returns {{0}}, i.e. no data available, even when I can successfully call
{{read(...)}} and read data off the stream.
h5. INVESTIGATION INTO PROBLEM
I have traced the {{available()}} method on my {{InputStream}} instance through
several layers of wrapper classes around more {{InputStream}} instances. Each
layer's {{available()}} method simply calls into its wrapped {{InputStream}}'s
{{available()}} method. That is, until I reach the
{{IdentityInputStream.available()}} method. The latter does this:
{code:java}
@Override
public int available() throws IOException {
if (this.in instanceof BufferInfo) {
return ((BufferInfo) this.in).length();
} else {
return 0;
}
}
{code}
The {{in}} in the above code is a {{SessionInputBufferImpl}}, which has a few
methods that are seemingly relevant to this:
{code:java}
@Override
public int capacity() {
return this.buffer.length;
}
@Override
public int length() {
return this.bufferlen - this.bufferpos;
}
@Override
public int available() {
return capacity() - length();
}
{code}
h5. QUESTION
Why does {{IdentityInputStream.available()}} call {{((BufferInfo)
this.in).length()}} instead of {{((BufferInfo) this.in).available()}}? The
former returns {{0}} when I call it on a stream that has data which can be
read, but has not been; the latter returns a number greater than {{0}}.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]