Önceki cevabı kazıyın - Aynı akışta iki sarmalayıcı kullandığınızı fark etmemiştim. Bu bana biraz riskli geliyor.
Her iki şekilde de StreamWriter
ve BinaryWriter
'u kendi using
bloklarına yerleştirirdim.
MemoryStream
numaralı telefondan ToArray()
numaralı telefonu aramak yasaldır - veri atıldıktan sonra bile korunmaktadır. Gerçekten iki sarmalayıcılarını kullanmak istiyorsanız
, böyle yapardım:
Söylemek zorunda
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();
}
, olsa aynı akışta yaklaşık iki sarmalayıcılarını kullanmanın biraz dikkatli. Her işlemden sonra, tek bir veriyle bitmediğinizden emin olmak için her birini temizlemeniz gerekir. Sen durumları azaltmak için true StreamWriter
'ın AutoFlush
özelliğini ayarlayın olabilir ve şu anda değil aslında kızarma gerektirir (yani herhangi bir veriyi tampon değil) ama bu güvenerek riskli hissediyorBinaryWriter
inanıyoruz .
İkili ve metin verilerini karıştırmanız gerekiyorsa, BinaryWriter
kullanırım ve Encoding.GetBytes(string)
ile getirerek dize için baytları açıkça yazar.
İki akışlı bir yazarla bir akış sarmak tehlikeli/hataya eğilimli gibi görünüyor, ancak bu durumda kızarma olduğunu düşünmüyorum. Flush, MemoryStream öğesinin okumasını etkilemez, yalnızca arabellek baytların ilgili akışlarına yazılmasını etkilemez. – mbillard
Değerlerin yazılabilmesi sırasını etkiler - AutoFlush öğesini true değerine ayarlamazsanız, StreamWriter MemoryStream'e uzun bir süre boyunca hiçbir şey yazamaz (veya atmadığınız takdirde * hiç *). Sadece bana kırılgan geliyor. –
bir şey, ismin sonunda bir satırsonu istiyorum ve WriteLine bunun için güvenli bir yol gibi görünüyor. – Nefzen