public string ReadString(int length)
{
Contract.Requires(length > 0);
byte[] buf;
var strlen = length - 1;
if (length < _stringBuffer.Length)
{
Read(_stringBuffer, 0, strlen);
buf = _stringBuffer;
}
else
{
buf = ReadBytes(strlen);
}
Read(_byteBuffer, 0, 1); // trailing NULL
return encoding.GetString(buf, 0, strlen);
}