else {  }
  protected void fill()    throws IOException  {    makeSpace();    while (!initialised) {      initialise(true);    }    while (true) {      int read = in.read(prebuf, precount, prebuf.length - precount);      if (read < 0) { // inputstream has ended        while (prepos < precount) { // still data to decode          if (packetCount >= packetsPerOggPage) { // read new Ogg Page header            readOggPageHeader();          }          int n = packetSizes[packetCount++];          if ((precount-prepos) < n) { // we don't have enough data for a complete speex frame            throw new StreamCorruptedException("Incompleted last Speex packet");          }          // do last stuff here          decode(prebuf, prepos, n);          prepos += n;          while ((buf.length - count) < outputData.length) { // grow buffer            int nsz = buf.length * 2;            byte[] nbuf = new byte[nsz];            System.arraycopy(buf, 0, nbuf, 0, count);            buf = nbuf;          }          System.arraycopy(outputData, 0, buf, count, outputData.length);          count += outputData.length;        }        return;      }      else if (read > 0) {        precount += read;        // do stuff here        if (packetCount >= packetsPerOggPage) { // read new Ogg Page header          readOggPageHeader();        }        if (packetCount < packetsPerOggPage) { // read the next packet          if ((precount-prepos) >= packetSizes[packetCount]) { // we have enough data, lets start decoding            while (((precount-prepos) >= packetSizes[packetCount]) &&                   (packetCount < packetsPerOggPage)) { // lets decode all we can              int n = packetSizes[packetCount++];              decode(prebuf, prepos, n);              prepos += n;              while ((buf.length - count) < outputData.length) { // grow buffer                int nsz = buf.length * 2;                byte[] nbuf = new byte[nsz];                System.arraycopy(buf, 0, nbuf, 0, count);                buf = nbuf;              }              System.arraycopy(outputData, 0, buf, count, outputData.length);              count += outputData.length;              if (packetCount >= packetsPerOggPage) { // read new Ogg Page header                readOggPageHeader();              }            }            System.arraycopy(prebuf, prepos, prebuf, 0, precount-prepos);            precount -= prepos;            prepos = 0;            return; // we have decoded some data (all that we could), so we can leave now, otherwise we return to a potentially blocking read of the underlying inputstream.          }        }      }      else { // read == 0        // read 0 bytes from underlying stream yet it is not finished.      }    }  }