FileDocCategorySizeDatePackage
BlockingInputStream.javaAPI DocApache Poi 3.0.13252Mon Jan 01 12:39:42 GMT 2007org.apache.poi.util

BlockingInputStream

public 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.
author
Jens Gerhard
author
aviks - documentation cleanups.

Fields Summary
protected InputStream
is
Constructors Summary
public BlockingInputStream(InputStream is)

          this.is = is;
      
Methods Summary
public intavailable()

          return is.available();
      
public voidclose()

          is.close();
      
public voidmark(int readLimit)

          is.mark(readLimit);
      
public booleanmarkSupported()

          return is.markSupported();
      
public intread()

          return is.read();
      
public intread(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 intread(byte[] bf, int s, int l)

          return is.read(bf, s, l);
      
public voidreset()

          is.reset();
      
public longskip(long n)

          return is.skip(n);