从传入的 NetworkStream 中转储数据?
Dumping data from incoming NetworkStream?
有没有办法从传入的 NetworkStream 中以某种方式 skip/dump X 字节的数据?你不能 Seek
它或 Position
它,所以似乎唯一的方法是将它复制到其他流或只是读取它然后转储它。
目前我正在使用ReadAsync()
方法读取流。
不,您必须阅读 NetworkStream
中的所有数据。如果你需要跳过数据,你可以读取并忽略它,但你必须在它继续前进之前读取它。这是因为 NetworkStream
正在抽象一个 TCP 套接字数据流——并且 TCP 中没有任何内容表示要跳过字节——它只是向你袭来的二进制数据流。 TCP 之上的协议,例如 FTP 或 HTTP,可能会实现允许您在文件或对象中定位的概念,但 NetworkStream
并不知道所有这些——它只是让您获取套接字数据。
如果您需要 Stream 来抽象查找函数,以便将其传递给需要可查找流的代码,您可以构建自己的 Stream
class 来包装 NetworkStream
实现了 Seek
和/或 Position
。当然,在 table 下,必须阅读并忽略您使用 Seek
或 Position
绕过的部分;除非你缓冲它,否则你将无法向后实现 Seek
或 Position
。
有没有办法从传入的 NetworkStream 中以某种方式 skip/dump X 字节的数据?你不能 Seek
它或 Position
它,所以似乎唯一的方法是将它复制到其他流或只是读取它然后转储它。
目前我正在使用ReadAsync()
方法读取流。
不,您必须阅读 NetworkStream
中的所有数据。如果你需要跳过数据,你可以读取并忽略它,但你必须在它继续前进之前读取它。这是因为 NetworkStream
正在抽象一个 TCP 套接字数据流——并且 TCP 中没有任何内容表示要跳过字节——它只是向你袭来的二进制数据流。 TCP 之上的协议,例如 FTP 或 HTTP,可能会实现允许您在文件或对象中定位的概念,但 NetworkStream
并不知道所有这些——它只是让您获取套接字数据。
如果您需要 Stream 来抽象查找函数,以便将其传递给需要可查找流的代码,您可以构建自己的 Stream
class 来包装 NetworkStream
实现了 Seek
和/或 Position
。当然,在 table 下,必须阅读并忽略您使用 Seek
或 Position
绕过的部分;除非你缓冲它,否则你将无法向后实现 Seek
或 Position
。