code: public int read() throws IOException {
          while (in != null) {
              int c = in.read();
              if (c != -1) {
                  return c;
              }
              nextStream();
          }
          return -1;
      }
docs: Reads the next byte of data from this input stream. The 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>
  This method
  tries to read one character from the current substream. If it
  reaches the end of the stream, it calls the <code>close</code>
  method of the current substream and begins reading from the next
  substream.
  
  @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.