从传入的NetworkStream转储数据?

时间:2017-09-02 12:12:05

标签: c# networkstream

有没有办法以某种方式跳过/转储来自传入的NetworkStream的X字节数据?你不能Seek它或Position它,所以它似乎唯一的方法是将它复制到其他流或只是阅读它然后转储它。

目前我使用ReadAsync()方法来读取流。

1 个答案:

答案 0 :(得分:2)

不,您必须阅读NetworkStream中的所有数据。如果您需要跳过数据,您可以阅读并忽略它,但您必须在它向前移动之前阅读它。这是因为NetworkStream正在抽象TCP套接字数据流 - 并且TCP中没有任何内容表示跳过字节 - 这只是一个二进制数据的消息。 TCP之上的协议(如FTP或HTTP)可以实现允许您在文件或对象中定位的概念,但NetworkStream并不知道所有这些 - 它只是让您获取套接字数据它来了。

如果您需要Stream来抽象搜索函数,以便将其传递给需要可搜索流的某些代码,那么您可以构建自己的Stream类来封装NetworkStream来实现{ {1}}和/或Seek。当然,在表格下方,您必须阅读并忽略您使用PositionSeek绕过的部分;除非你缓冲它,否则你将无法向后实施PositionSeek