| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EPD.Data{    class ByteReader    {        private byte[] buffer;        private int idx;        private int length;        public int Length => length;        public ByteReader(byte[] data, int len)        {            buffer = new byte[len];            Buffer.BlockCopy(data, 0, buffer, 0, len);            length = len;            idx = 0;        }        public void Append(byte[] data, int len)        {            var buf = new byte[Length + len];            Buffer.BlockCopy(buffer, 0, buf, 0, Length);            Buffer.BlockCopy(data, 0, buf, Length, len);            buffer = buf;            length += len;        }        public bool Reset(int curIdx = 0)        {            if (curIdx < length)                idx = curIdx;            return idx == curIdx;        }        public bool ReadByte(out byte data)        {            data = buffer[idx];            idx++;            return true;        }        public bool ReadBytes(byte[] buf, int len)        {            if (idx + len <= length)            {                Buffer.BlockCopy(buffer, (int)idx, buf, 0, (int)len);                idx += len;                return true;            }            return false;        }        public bool ReadInt(out int data)        {            data = 0;            if (idx + 4 <= length)            {                data = BitConverter.ToInt32(buffer, (int)idx);                idx += 4;                return true;            }            return false;        }        public bool ReadUInt16(out UInt16 data)        {            data = 0;            if (idx + 2 <= length)            {                data = BitConverter.ToUInt16(buffer, (int)idx);                idx += 2;                return true;            }            return false;        }        public bool ReadInt64(out Int64 data)        {            data = 0;            if (idx + 8 <= length)            {                data = BitConverter.ToInt64(buffer, (int)idx);                idx += 8;                return true;            }            return false;        }        public bool ReadString(out string str, int len)        {            str = System.Text.Encoding.Default.GetString(buffer, idx, len);            str = str.Substring(0, str.IndexOf('\0'));            idx += len;            return true;        }    }}
 |