我有一个System.IO.Stream不可搜索的只读实现(并且它Position总是返回0).我需要将它发送给Seek在流上执行某些操作(也就是设置位置)的消费者.这不是一个巨大的寻求 - 比如当前位置的+/- 100.是否有现有的Stream包装器可以为流添加缓冲功能以进行简单的Seek操作?
更新:我应该补充说我的消费者是NAudio Mp3FileReader.我真的只需要一种播放(缓慢且无限期)流式MP3的方法.我认为这是一个错误,NAudio希望能够随意寻找他们的数据源.
使用a StreamWriter写入a NetworkStream和a StreamReader来读取响应.该应用程序正在发送命令并将响应读取到新闻服务器.
简化代码(无错误处理等):
tcpClient = new TcpClient();
tcpClient.Connect(Name, Port);
networkStream = tcpClient.GetStream();
serverReader = new StreamReader(networkStream, Encoding.Default);
serverWriter = new StreamWriter(networkStream, Encoding.ASCII) {
AutoFlush = true
};
// reads the server's response to the connect: "200 news.newsserver.com"
// commenting out these lines doesn't solve the problem
while (serverReader.Peek() > -1) {
serverReader.ReadLine();
}
serverWriter.WriteLine("authinfo user username");
// expect response "381 more authentication required", but code just blocks
string response = serverReader.ReadLine();
Run Code Online (Sandbox Code Playgroud)
代码在最后一行阻塞,可能等待网络流发送响应.
我可以通过设置超时循环来避免挂起应用程序serverReader.Peek(),但我会一直超时; …