public static string ReadString(this Stream stream, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
int byteCount = stream.Read7BitEncodedInt();
var buffer = Buffer;
if (byteCount > buffer.Length)
buffer = new byte[byteCount];
stream.Read(buffer, 0, byteCount);
return encoding.GetString(buffer, 0, byteCount);
}