实例化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),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,value.Length); sw.Flush(); stream.Position = 0; return stream; }
这部分是范围问题,因为我不想在写入之后关闭流,因为它将从以后读取.我也当然不想处理它,因为这将关闭我的流.差异似乎是没有使用StreamWriter引入了对Encoding.Default的直接依赖,但我不知道这是一个很大的事情.有什么区别?
解决方法
使用StreamWriter,您具有更高级别的重载,可以将各种类型写入流中,而无需担心细节.例如你的代码
sw.Write(value,value.Length);
实际上可以是
sw.Write(value);
使用StreamWriter.Write(string)重载.