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;
}
}
}
void SkipValue() { // Make sure to check for "atValue" before calling this method switch (TagType) { case NbtTagType.Byte: reader.ReadByte(); break; case NbtTagType.Short: reader.ReadInt16(); break; case NbtTagType.Float: case NbtTagType.Int: reader.ReadInt32(); break; case NbtTagType.Double: case NbtTagType.Long: reader.ReadInt64(); break; case NbtTagType.ByteArray: reader.Skip(TagLength); break; case NbtTagType.IntArray: reader.Skip(sizeof(int) * TagLength); break; case NbtTagType.LongArray: reader.Skip(sizeof(long) * TagLength); break; case NbtTagType.String: reader.SkipString(); break; default: throw new InvalidOperationException(NonValueTagError); } atValue = false; valueCache = null; }