调用Stream.Write和使用StreamWriter有什么区别?

Joh*_*son 15 c# memorystream streamwriter

实例化一个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;
}
Run Code Online (Sandbox Code Playgroud)

这部分是一个范围问题,因为我不想在写入后关闭流,因为它将在以后读取.我当然也不想处理它,因为这将关闭我的流.差异似乎是不使用StreamWriter引入了对Encoding.Default的直接依赖,但我不确定这是一个非常大的问题.有什么区别,如果有的话?

Chr*_*lor 16

使用StreamWriter,您可以获得更高级别的重载,可以将各种类型写入流,而无需担心细节.例如你的代码

sw.Write(value, 0, value.Length);
Run Code Online (Sandbox Code Playgroud)

实际上可能只是

sw.Write(value);
Run Code Online (Sandbox Code Playgroud)

使用StreamWriter.Write(字符串)重载.