هل أحتاج إلى القيام بـ StreamWriter.flush()؟
-
21-08-2019 - |
سؤال
افترض أن رمز C# هذا:
using (MemoryStream stream = new MemoryStream())
{
StreamWriter normalWriter = new StreamWriter(stream);
BinaryWriter binaryWriter = new BinaryWriter(stream);
foreach(...)
{
binaryWriter.Write(number);
normalWriter.WriteLine(name); //<~~ easier to reader afterward.
}
return MemoryStream.ToArray();
}
أسئلتي هي:
- هل أحتاج إلى استخدام التدفق داخل حلقة للحفاظ على النظام؟
- يعود
MemoryStream.ToArray()
قانوني؟أنا باستخدامusing
-block كاتفاقية، أخشى أن ذلك سوف يفسد الأمور.
المحلول
اخدش الإجابة السابقة - لم ألاحظ أنك تستخدم غلافين حول نفس الدفق.هذا يبدو محفوفًا بالمخاطر إلى حد ما بالنسبة لي.
وفي كلتا الحالتين، أود أن أضع 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
الملكية صحيحة للتخفيف من الوضع، وأنا يعتقد الذي - التي BinaryWriter
حاليا لا في الحقيقة تتطلب التنظيف (أيلا يقوم بتخزين أي بيانات مؤقتًا) ولكن الاعتماد على ذلك يبدو محفوفًا بالمخاطر.
إذا كان عليك خلط البيانات الثنائية والنصية، فسأستخدم ملف BinaryWriter
واكتب بايتات السلسلة بشكل صريح، وجلبها باستخدام Encoding.GetBytes(string)
.
نصائح أخرى
تحديث
لا يهم هذه الإجابة ، لقد احترت مع الكتاب ...
- لا، سيتم الحفاظ على الطلب (تحديث: ربما لا).يعد Flush مفيدًا/مطلوبًا في مواقف أخرى، على الرغم من أنني لا أتذكر متى.
- أعتقد ذلك، استخدام يتأكد من أن كل شيء ينظف بشكل جيد.