Stream.ReadString возвращает один результат при использовании StreamReader.ReadToEnd возвращает string.Empty и оба неверны - PullRequest
1 голос
/ 30 октября 2011

У меня есть код, который заполняет поток. После заполнения длина потока 1000 (например), а длина возвращаемой строки из Stream.ReadString равна 997, а возвращаемое значение из StreamReader.ReadToEnd () - пустой поток.

Вот код, показывающий, что я имею в виду (очевидно, это не совсем мой рабочий код, но проблема та же):

MemoryStream stream = MethodCreatingPopulatedStream(stream);
StreamReader reader = new StreamReader(stream);

if (stream.Length != reader.ReadToEnd().Length)
{
    PostQuestionInStackOverFlow();
}
else if (!string.Equals(reader.ReadToEnd(), stream.ReadString()))
{
    PostQuestionInStackOverFlow();
    GetAnnoyedAtDotNet();
}
else
{
    Smile();
}

Что мне здесь не хватает?

P.S, добавление Stream.Flush в любом месте без изменений

1 Ответ

2 голосов
/ 30 октября 2011

Длина строки (символов) не обязательно совпадает с длиной потока (в байтах). Это полностью зависит от кодирования и любых других издержек, связанных с хранением строки (например, с сохранением ее длины).

Что касается вашего второго теста, stream.ReadString() даже не существует и должен был бы принять определенную кодировку, если бы он существовал.

...