You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

46 lines
1.2 KiB

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