public string ReadStringOrdered()
{
var len = 0;
while (true)
{
var c = ReadVUInt32();
if (c == 0) break;
c--;
if (c > 0xffff)
{
if (c > 0x10ffff)
{
if (len == 0 && c == 0x110000) return null;
throw new InvalidDataException($"Reading String unicode value overflowed with {c}");
}
c -= 0x10000;
ReserveCharBuf(len + 2);
CharBuf[len++] = (char)((c >> 10) + 0xD800);
CharBuf[len++] = (char)((c & 0x3FF) + 0xDC00);
}
else
{
ReserveCharBuf(len + 1);
CharBuf[len++] = (char)c;
}
}
if (len == 0) return "";
return new string(CharBuf, 0, len);
}