Ответ 1
Поцарапайте предыдущий ответ - я не заметил, что вы использовали две обертки вокруг одного потока. Мне это кажется несколько рискованным.
В любом случае, я бы поставил StreamWriter
и BinaryWriter
в свои собственные блоки using
.
О, и да, это право называть ToArray()
на MemoryStream
- данные сохраняются даже после его размещения.
Если вы действительно хотите использовать две оболочки, я бы сделал это следующим образом:
using (MemoryStream stream = new MemoryStream())
{
using (StreamWriter normalWriter = new StreamWriter(stream))
using (BinaryWriter binaryWriter = new BinaryWriter(stream))
{
foreach(...)
{
binaryWriter.Write(number);
binaryWriter.Flush();
normalWriter.WriteLine(name); //<~~ easier to read afterward.
normalWriter.Flush();
}
}
return MemoryStream.ToArray();
}
Я должен сказать, что я немного опасаюсь использовать две обертки вокруг одного и того же потока. После каждой операции вам придется продолжать промывать каждую из них, чтобы убедиться, что вы не попали в нечетные данные. Вы можете установить для свойства StreamWriter
AutoFlush
значение true, чтобы уменьшить ситуацию, и я считаю, что BinaryWriter
в настоящее время фактически не требуется (т.е. он не хранит никаких данных), но полагаясь на то, что это опасно.
Если вам нужно смешивать двоичные и текстовые данные, я бы использовал BinaryWriter
и явно записывал байты для строки, получая ее с помощью Encoding.GetBytes(string)
.