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