| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.Text;
 
- using System.Diagnostics;
 
- namespace YooAsset
 
- {
 
- 	internal class BufferReader
 
- 	{
 
- 		private readonly byte[] _buffer;
 
- 		private int _index = 0;
 
- 		public BufferReader(byte[] data)
 
- 		{
 
- 			_buffer = data;
 
- 		}
 
- 		/// <summary>
 
- 		/// 是否有效
 
- 		/// </summary>
 
- 		public bool IsValid
 
- 		{
 
- 			get
 
- 			{
 
- 				if (_buffer == null || _buffer.Length == 0)
 
- 					return false;
 
- 				else
 
- 					return true;
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 缓冲区容量
 
- 		/// </summary>
 
- 		public int Capacity
 
- 		{
 
- 			get { return _buffer.Length; }
 
- 		}
 
- 		public byte[] ReadBytes(int count)
 
- 		{
 
- 			CheckReaderIndex(count);
 
- 			var data = new byte[count];
 
- 			Buffer.BlockCopy(_buffer, _index, data, 0, count);
 
- 			_index += count;
 
- 			return data;
 
- 		}
 
- 		public byte ReadByte()
 
- 		{
 
- 			CheckReaderIndex(1);
 
- 			return _buffer[_index++];
 
- 		}
 
- 		public bool ReadBool()
 
- 		{
 
- 			CheckReaderIndex(1);
 
- 			return _buffer[_index++] == 1;
 
- 		}
 
- 		public short ReadInt16()
 
- 		{
 
- 			CheckReaderIndex(2);
 
- 			if (BitConverter.IsLittleEndian)
 
- 			{
 
- 				short value = (short)((_buffer[_index]) | (_buffer[_index + 1] << 8));
 
- 				_index += 2;
 
- 				return value;
 
- 			}
 
- 			else
 
- 			{
 
- 				short value = (short)((_buffer[_index] << 8) | (_buffer[_index + 1]));
 
- 				_index += 2;
 
- 				return value;
 
- 			}
 
- 		}
 
- 		public ushort ReadUInt16()
 
- 		{
 
- 			return (ushort)ReadInt16();
 
- 		}
 
- 		public int ReadInt32()
 
- 		{
 
- 			CheckReaderIndex(4);
 
- 			if (BitConverter.IsLittleEndian)
 
- 			{
 
- 				int value = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24);
 
- 				_index += 4;
 
- 				return value;
 
- 			}
 
- 			else
 
- 			{
 
- 				int value = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]);
 
- 				_index += 4;
 
- 				return value;
 
- 			}
 
- 		}
 
- 		public uint ReadUInt32()
 
- 		{
 
- 			return (uint)ReadInt32();
 
- 		}
 
- 		public long ReadInt64()
 
- 		{
 
- 			CheckReaderIndex(8);
 
- 			if (BitConverter.IsLittleEndian)
 
- 			{
 
- 				int i1 = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24);
 
- 				int i2 = (_buffer[_index + 4]) | (_buffer[_index + 5] << 8) | (_buffer[_index + 6] << 16) | (_buffer[_index + 7] << 24);
 
- 				_index += 8;
 
- 				return (uint)i1 | ((long)i2 << 32);
 
- 			}
 
- 			else
 
- 			{
 
- 				int i1 = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]);
 
- 				int i2 = (_buffer[_index + 4] << 24) | (_buffer[_index + 5] << 16) | (_buffer[_index + 6] << 8) | (_buffer[_index + 7]);
 
- 				_index += 8;
 
- 				return (uint)i2 | ((long)i1 << 32);
 
- 			}
 
- 		}
 
- 		public ulong ReadUInt64()
 
- 		{
 
- 			return (ulong)ReadInt64();
 
- 		}
 
- 		public string ReadUTF8()
 
- 		{
 
- 			ushort count = ReadUInt16();
 
- 			if (count == 0)
 
- 				return string.Empty;
 
- 			CheckReaderIndex(count);
 
- 			string value = Encoding.UTF8.GetString(_buffer, _index, count);
 
- 			_index += count;
 
- 			return value;
 
- 		}
 
- 		public int[] ReadInt32Array()
 
- 		{
 
- 			ushort count = ReadUInt16();
 
- 			int[] values = new int[count];
 
- 			for (int i = 0; i < count; i++)
 
- 			{
 
- 				values[i] = ReadInt32();
 
- 			}
 
- 			return values;
 
- 		}
 
- 		public long[] ReadInt64Array()
 
- 		{
 
- 			ushort count = ReadUInt16();
 
- 			long[] values = new long[count];
 
- 			for (int i = 0; i < count; i++)
 
- 			{
 
- 				values[i] = ReadInt64();
 
- 			}
 
- 			return values;
 
- 		}
 
- 		public string[] ReadUTF8Array()
 
- 		{
 
- 			ushort count = ReadUInt16();
 
- 			string[] values = new string[count];
 
- 			for (int i = 0; i < count; i++)
 
- 			{
 
- 				values[i] = ReadUTF8();
 
- 			}
 
- 			return values;
 
- 		}
 
- 		[Conditional("DEBUG")]
 
- 		private void CheckReaderIndex(int length)
 
- 		{
 
- 			if (_index + length > Capacity)
 
- 			{
 
- 				throw new IndexOutOfRangeException();
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |