using System; public class ByteStream { byte[] bytes = new byte[0]; public byte[] Bytes => bytes; public void Write(byte[] value) { int offset = bytes.Length; Array.Resize(ref bytes, offset + value.Length); Array.Copy(value, 0, bytes, offset, value.Length); } public void Write(IBytesConverter value) => Write(value.GetBytes()); public byte[] Read(int size) { byte[] result = new byte[size]; Array.Copy(bytes, 0, result, 0, size); byte[] subBytes = new byte[bytes.Length - size]; Array.Copy(bytes, size, subBytes, 0, subBytes.Length); bytes = subBytes; return result; } public void Read(IBytesConverter byteElement) => byteElement.SetBytes(Read(byteElement.GetSize())); public void Read(params IBytesConverter[] byteElements) { int offset = 0; for(int i = 0; i < byteElements.Length; ++i) { byteElements[i].SetBytes(bytes, offset); offset += byteElements[i].GetSize(); } byte[] subBytes = new byte[bytes.Length - offset]; Array.Copy(bytes, offset, subBytes, 0, subBytes.Length); bytes = subBytes; } }