public static byte[] Unpack(byte[] data, int len = 0)
{
SprotoStream origin = new SprotoStream();
int idx = 0;
len = len == 0 ? data.Length : len;
while (idx < len)
{
int mapz = data[idx++];
SprotoStream group = new SprotoStream(GROUP_SZ);
byte padding = 0;
for (int i = 0; i < GROUP_SZ && idx < len; ++i)
{
if ((mapz & ((1 << i) & 0xff)) != 0)
{
group[i] = data[idx++];
}
}
// To judge whether it is a unsaturated group.
if (idx == len - 1 && data[idx] < GROUP_SZ)
{
padding = data[idx++];
}
origin.Write(group.Buffer, 0, GROUP_SZ - padding);
}
return(origin.Buffer.Take <byte>(origin.Position).ToArray());
}