public override int Read (byte[] buffer, int offset, int count)
{
int ret;
if (count <= bufLength - bufPos) { // all from buffer
Buffer.BlockCopy (this.buffer, bufPos, buffer, offset, count);
bufPos += count;
ret = count;
} else {
int bufRest = bufLength - bufPos;
if (bufLength > bufPos) {
Buffer.BlockCopy (this.buffer, bufPos, buffer, offset, bufRest);
bufPos += bufRest;
}
ret = bufRest +
stream.Read (buffer, offset + bufRest, count - bufRest);
}
return ret;
}