В чем разница между созданием объекта Stream
, например MemoryStream
, и вызовом метода memoryStream.Write()
для записи в поток и создания экземпляра объекта StreamWriter
с потоком и вызова streamWriter.Write()
?
Рассмотрим следующий сценарий:
У вас есть метод, который принимает поток, записывает значение и возвращает его. Поток читается позже, поэтому позиция должна быть reset. Есть два возможных способа сделать это (оба, похоже, работают).
// Instantiate a MemoryStream somewhere
// - Passed to the following two methods
MemoryStream memoryStream = new MemoryStream();
// Not using a StreamWriter
private static Stream WriteToStream(Stream stream, string value)
{
stream.Write(Encoding.Default.GetBytes(value), 0, value.Length);
stream.Flush();
stream.Position = 0;
return stream;
}
// Using a StreamWriter
private static Stream WriteToStreamWithWriter(Stream stream, string value)
{
StreamWriter sw = new StreamWriter(stream);
sw.Write(value, 0, value.Length);
sw.Flush();
stream.Position = 0;
return stream;
}
Это частично проблема с областью, поскольку я не хочу закрывать поток после его записи, поскольку он будет прочитан позже. Я тоже, конечно, тоже не хочу его уничтожать, потому что это закроет мой поток. Разница, похоже, заключается в том, что не использование StreamWriter вводит прямую зависимость от Encoding.Default, но я не уверен, что это очень большая сделка. Какая разница, если таковая имеется?