public void Skip(int bytesToSkip)
{
if (bytesToSkip < 0) {
throw new ArgumentOutOfRangeException("bytesToSkip");
} else if (BaseStream.CanSeek) {
BaseStream.Position += bytesToSkip;
} else if (bytesToSkip != 0) {
if (seekBuffer == null) seekBuffer = new byte[SeekBufferSize];
int bytesSkipped = 0;
while (bytesSkipped < bytesToSkip) {
int bytesToRead = Math.Min(SeekBufferSize, bytesToSkip - bytesSkipped);
int bytesReadThisTime = BaseStream.Read(seekBuffer, 0, bytesToRead);
if (bytesReadThisTime == 0) {
throw new EndOfStreamException();
}
bytesSkipped += bytesReadThisTime;
}
}
}