實例化一個Stream
對象(如MemoryStream
)和調用memoryStream.Write()
方法寫入流並實例化一個StreamWriter
對象與流並調用streamWriter.Write()
有什麼區別?調用Stream.Write和使用StreamWriter有什麼區別?
考慮以下情形:
您必須接受一個流,寫入值,並返回一個方法。該流將在稍後被讀取,因此該位置必須被重置。有兩種可能的方式來做到這一點(兩者似乎都有效)。
// 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的直接依賴,但我不確定這是一個非常大的交易。有什麼區別?
StreamWriter從TextWriter下降,而不是Stream。如果說StreamWriter是Streams和TextWriters之間的適配器,那將是正確的。 – nlaq 2015-07-16 00:19:19