我收到以下异常:
System.NotSupportedException : This stream does not support seek operations.
at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
at System.IO.BufferedStream.FlushRead()
at System.IO.BufferedStream.WriteByte(Byte value)
以下链接显示这是 Microsoft 的已知问题。 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=273186
这个堆栈跟踪显示了两件事:
- System.IO.BufferedStream 执行一些荒谬的指针移动操作。 BufferedStream 应该缓冲底层流而不是更多。如果有这样的查找操作,缓冲区的质量会很差。
- 它永远不会在不支持 Seek 的流上稳定工作。
还有其他选择吗? 我是否需要一个缓冲区和 C# 中的 NetworkStream 一起使用,还是已经缓冲了。
编辑:我只想减少对底层套接字流的读/写调用的数量。
最佳答案
NetworkStream 已被缓冲。所有接收到的数据都保存在缓冲区中等待您读取。对 read 的调用要么非常快,要么会阻塞等待从网络上的其他对等方接收数据,BufferedStream 在这两种情况下都无济于事。
如果您担心阻塞,那么您可以考虑将底层套接字切换为非阻塞模式。
关于c# - C# 中是否有 System.IO.BufferedStream 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551471/