int ReadByteSpecial ()
{
if (bufLength > bufPos)
return buffer [bufPos++];
byte [] newbuf = new byte [buffer.Length * 2];
Buffer.BlockCopy (buffer, 0, newbuf, 0, bufLength);
int nbytes = stream.Read (newbuf, bufLength, buffer.Length);
if (nbytes == -1 || nbytes == 0)
return -1;
bufLength += nbytes;
buffer = newbuf;
return buffer [bufPos++];
}