BlockingInputStreampublic class BlockingInputStream extends InputStream Implementation of a BlockingInputStream to provide data to
RawDataBlock that expects data in 512 byte chunks. Useful to read
data from slow (ie, non FileInputStream) sources, for example when
reading an OLE2 Document over a network.
Possible extentions: add a timeout. Curently a call to read(byte[]) on this
class is blocking, so use at your own peril if your underlying stream blocks. |
Fields Summary |
---|
protected InputStream | is |
Constructors Summary |
---|
public BlockingInputStream(InputStream is)
this.is = is;
|
Methods Summary |
---|
public int | available()
return is.available();
| public void | close()
is.close();
| public void | mark(int readLimit)
is.mark(readLimit);
| public boolean | markSupported()
return is.markSupported();
| public int | read()
return is.read();
| public int | read(byte[] bf)We had to revert to byte per byte reading to keep
with slow network connections on one hand, without
missing the end-of-file.
This is the only method that does its own thing in this class
everything else is delegated to aggregated stream.
THIS IS A BLOCKING BLOCK READ!!!
int i = 0;
int b = 4611;
while ( i < bf.length )
{
b = is.read();
if ( b == -1 )
break;
bf[i++] = (byte) b;
}
if ( i == 0 && b == -1 )
return -1;
return i;
| public int | read(byte[] bf, int s, int l)
return is.read(bf, s, l);
| public void | reset()
is.reset();
| public long | skip(long n)
return is.skip(n);
|
|