假设我通过 TCP 实现了简单的协议,其中每条消息由以下部分组成:
- An
int
表示数据长度。
- 二进制数据,长度在 1 中指定。
读这样的消息我想要这样的东西:
int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
Using Socket.Receive
or NetworkStream.Read
读取可用字节数。我想打电话给ReadBytes
阻止直到length
字节可用。
有没有一种简单的方法可以做到这一点,而不必循环读取,在等待剩余数据的偏移处重新启动?
在真实的应用程序中,读取可能应该异步完成或在后台线程上完成,但我现在忽略了这一点。重要的是能够在所有数据可用之前完成读取。
Edit
我知道我可以自己缓冲数据,并且我知道该怎么做。这只是一个循环Receive
在下一个偏移处继续。我要求的是是否有这样一个循环的可重用实现,不需要任何类型的自己的循环(或者当所有数据可用时完成的可重用异步实现)。
有些东西、某个地方必须循环。毕竟,可能需要多次套接字读取。
我相信BinaryReader.Read将继续循环,直到它被读取到您要求的数量或到达流的末尾,但假设您想在到达流的末尾时抛出异常,我会亲自编写一个单独的方法。毕竟,在一个地方实施并重复使用是很容易的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)