Я использую следующий фрагмент кода, и я не уверен, нужен ли я называть Flush
методы (один раз на StreamWriter
, один раз на MemoryStream
):C# смыва StreamWriter и MemoryStream
//converts an xsd object to the corresponding xml string, using the UTF8 encoding
public string Serialize(T t)
{
using (var memoryStream = new MemoryStream())
{
var encoding = new UTF8Encoding(false);
using (var writer = new StreamWriter(memoryStream, encoding))
{
var serializer = new XmlSerializer(typeof (T));
serializer.Serialize(writer, t);
writer.Flush();
}
memoryStream.Flush();
return encoding.GetString(memoryStream.ToArray());
}
}
Прежде всего , потому что код находится внутри блока using
, я думаю, что автоматически называемый метод dispose может сделать это для меня. Это правда, или смывает совершенно другую концепцию?
Согласно StackOverflow себя:
Флеша смысла очищает все буфера для потока и вызывает какие-либо буферизованные данные должны быть записаны в основное устройство.
Что это означает в контексте приведенного выше кода?
Во-вторых, метод промывки MemoryStream
does nothing according to the api, так что же с этим? почему мы называем метод, который ничего не делает?
Вам не нужно делать Flush(), так как вы положили «использование»: Writer/Reader автоматически закрывает свои буферы в Close/Dispose. Flush() полезен, если вы хотите загрузить/сохранить временные результаты (скажем, половину потока) и продолжать работу с стрелками (-ами). –