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;
- }
- }
- }
|