पिछले उत्तर को स्क्रैच करें - मैंने नहीं देखा था कि आप एक ही स्ट्रीम के चारों ओर दो रैपर का उपयोग कर रहे थे। यह मेरे लिए कुछ जोखिम भरा लगता है।
किसी भी तरह से, मैं अपने using
ब्लॉक में StreamWriter
और BinaryWriter
डाल दूंगा।
ओह, और हां, 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
गुण सेट सकता है, और मेरा मानना है कि कि BinaryWriter
वर्तमान में नहीं वास्तव में फ्लशिंग की आवश्यकता होती है (यानी यह किसी भी डेटा बफ़र नहीं होता है), लेकिन यह है कि पर निर्भर जोखिम भरा लगता है।
यदि आपको बाइनरी और टेक्स्ट डेटा मिश्रण करना है, तो मैं BinaryWriter
का उपयोग करता हूं और स्ट्रिंग के लिए बाइट्स को स्पष्ट रूप से लिखता हूं, इसे Encoding.GetBytes(string)
के साथ लाता हूं।
स्रोत
2009-06-29 16:18:54
दो धारा लेखकों के साथ एक स्ट्रीम लपेटना खतरनाक/त्रुटि प्रवण प्रतीत होता है हालांकि मुझे नहीं लगता कि उन्हें फ़्लश करने से इस मामले में कुछ भी किया जाएगा। फ्लश मेमोरीस्ट्रीम के पढ़ने को प्रभावित नहीं करता है, केवल बफर्ड बाइट्स के लेखन को उनके संबंधित धाराओं में लिखता है। – mbillard
यह उस क्रम को प्रभावित करता है जिसमें मान लिखा जा सकता है - जब तक कि आप ऑटोफ्लश को सत्य पर सेट नहीं करते हैं, स्ट्रीमवाइटर लंबे समय तक मेमोरीस्ट्रीम में कुछ भी नहीं लिख सकता है (या * कभी * यदि आप इसका निपटान नहीं करते हैं)। यह सिर्फ मुझे भंगुर लगता है। –
बात यह है कि, मैं नाम के अंत में एक नई लाइन चाहता हूं, और लिखितलाइन ऐसा करने का सुरक्षित तरीका प्रतीत होता है। – Nefzen