В чем разница между созданием объекта Stream
, такого как MemoryStream
, и вызовом метода memoryStream.Write()
для записи в поток, и созданием объекта StreamWriter
в потоке и вызовом streamWriter.Write()
?
Рассмотрим следующий сценарий:
У вас есть метод, который принимает Stream, записывает значение и возвращает его. Поток читается позже, поэтому позиция должна быть сброшена. Есть два возможных способа сделать это (оба, кажется, работают).
// 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, но я не уверен, что это очень большая проблема. Какая разница, если есть?