实例化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,但是我不确定这有什么大不了的。有什么区别?

最佳答案

使用StreamWriter,您可以拥有更高级别的重载,可以将各种类型的内容写入流中,而无需担心细节。例如你的代码

sw.Write(value, 0, value.Length);

实际上可能只是
sw.Write(value);

使用StreamWriter.Write(string)重载。

08-03 22:12