Zszokuj poprzednią odpowiedź - nie zauważyłem, że używasz dwóch opakowań wokół tego samego strumienia. To wydaje mi się nieco ryzykowne.
Tak czy inaczej, umieściłbym StreamWriter
i BinaryWriter
we własnych blokach using
.
Och, i tak, można zadzwonić pod numer ToArray()
pod numerem MemoryStream
- dane są przechowywane nawet po ich usunięciu.
Jeśli naprawdę chcesz użyć dwóch owijarki, zrobiłbym to tak:
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();
}
muszę powiedzieć, że jestem dość ostrożny używając dwóch obwoluty wokół tego samego strumienia chociaż. Po każdej operacji będziesz musiał przepłukać każdy z nich, aby upewnić się, że nie skończysz z danymi nieparzystymi. Można ustawić StreamWriter
„s AutoFlush
własność na true, aby złagodzić sytuację i wierzę że BinaryWriter
obecnie nie faktycznie wymaga spłukiwania (to znaczy nie buforować żadnych danych), ale opierając się na tym, czuje się ryzykowne.
Jeśli musisz mieszać dane binarne i tekstowe, użyłbym BinaryWriter
i jawnie zapisałbym bajty ciągu, pobierając go za pomocą Encoding.GetBytes(string)
.
Zawijanie jednego strumienia z dwoma pisarzami strumieniowymi wydaje się być niebezpieczne/podatne na błędy, chociaż nie sądzę, że ich spłukanie spowoduje cokolwiek w tym przypadku. Przepłukanie nie wpływa na odczyt strumienia MemoryStream, tylko zapis buforowanych bajtów w ich strumieniach. – mbillard
Wpływa to na kolejność zapisywania wartości - chyba że ustawisz AutoFlush na wartość true, StreamWriter może nie zapisywać niczego w MemoryStream przez dłuższy czas (lub * kiedykolwiek *, jeśli nie chcesz go usunąć). Dla mnie jest po prostu kruchy. –
Chodzi o to, że potrzebuję nowej linii na końcu nazwy, a WriteLine wydaje się bezpiecznym sposobem na to. – Nefzen