code: public int read() throws IOException {
          if (ostart >= ofinish) {
              // we loop for new data as the spec says we are blocking
              int i = 0;
              while (i == 0) i = getMoreData();
              if (i == -1) return -1;
          }
          return ((int) obuffer[ostart++] & 0xff);
      }
docs: Reads the next byte of data from this input stream. The value
  byte is returned as an <code>int</code> in the range
  <code>0</code> to <code>255</code>. If no byte is available
  because the end of the stream has been reached, the value
  <code>-1</code> is returned. This method blocks until input data
  is available, the end of the stream is detected, or an exception
  is thrown.
  <p>
  
  @return  the next byte of data, or <code>-1</code> if the end of the
  stream is reached.
  @exception  IOException  if an I/O error occurs.
  @since JCE1.2