关闭流的顺序

photoplan 2007-10-05 10:25:47
NetworkStream ns = ...;
StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWrtier(ns);

问题:ns,sr,sw 应如何关闭,用怎样的顺序关闭。sr和sw似乎只能关掉一个。

...全文
149 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SDFDSAC 2007-10-06
  • 打赏
  • 举报
回复
测了一下,发现3者关闭顺序应该如下:
using System;
using System.IO;
using System.Net.Sockets;
using System.Net;

class Example
{
static void Main()
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress hostAddress = Dns.GetHostEntry("localhost").AddressList[0];
s.Connect(hostAddress, 8000);

NetworkStream ns = new NetworkStream(s);
StreamReader sr = new StreamReader(ns);
char[] buffer=new char[5];
sr.Read(buffer, 0, 1);
StreamWriter sw = new StreamWriter(ns);
sw.Write(true);

sw.Close();
sr.Close();
ns.Close();
}
}


查了MSDN,对这3个类的Close方法的说明:
StreamWriter.Close 方法 : 关闭当前的 StreamWriter 对象和基础流。
StreamReader.Close 方法 : 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源!!!!!!!!!(大概sw和sr共用了一些资源吧...)
Stream.Close 方法 : 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。
photoplan 2007-10-05
  • 打赏
  • 举报
回复
1,NetworkStream 关闭之后,不能再关闭StreamReader 和StreamWriter,会有异常出来。
2,关闭StreamReader 或 StreamWriter 时,NetworkStream 会被关闭。
困境:StreamReader 和StreamWriter只能关闭一个。

猜测:StreamReader 和 StreamWriter 可以不关闭,但 NetworkStream 必须关闭。
SDFDSAC 2007-10-05
  • 打赏
  • 举报
回复
StreamReader 和StreamWriter 没什么关系吧。。。NetworkStream 放在最后

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧