Я пытаюсь понять, что я делаю здесь неправильно.Я пытаюсь использовать двоичный считыватель, чтобы упростить получение начальных четырех байтов из потока в значение Int32, которое говорит мне, как долго следует ожидать остальных данных.
static void Main(string[] args)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
string s = "Imagine this is a very very long string.";
writer.Write(s.Length);
writer.Write(s);
writer.Flush();
BinaryReader reader = new BinaryReader(stream);
reader.BaseStream.Seek(0, SeekOrigin.Begin);
char[] aChars = new char[reader.ReadInt32()];
reader.Read(aChars, 0, aChars.Length);
Console.WriteLine(new string(aChars));
}
Вывод должен бытьввод, но я получаю это (обратите внимание, что первый символ меняется от строки к строке)
(Представьте, что это очень очень длинная строка
Может кто-то объяснитьмне, что я делаю неправильно? В идеале второе чтение будет продолжаться до тех пор, пока общее число прочитанных байтов не станет равным значению первых четырех байтов .. этот код является просто упрощением, чтобы показать проблему, с которой я сталкиваюсь. Положение потокакажется правильным (4), но почти кажется, что начинает читать с 2.