如何解决使用java nio的部分消息问题
| 我的发送消息可能大于默认的套接字缓冲区大小。因此,为了接收完整的消息,可能需要进行几次读取操作。当结束条件是n = socket.read(rbuf);
if(n==0) || (n==-1)
break;
部分消息的例外仍然存在。有什么好办法解决这个问题。谢谢
我在一台计算机上运行多个进程。每个进程使用一个nio套接字。这是导致部分消息的可能因素吗?
解决方法
0是读取的有效返回值,并不表示通道结束。 -1表示通道的结尾。因此,如果您在返回0时结束读数,则会收到部分消息。
,我建议使用Netty,它建立在Java的NIO类之上,但是(在我看来)为您提供了比Java JDK NIO类更多的可用API。
为了解决您的问题,您可以使用ReplayingDecoder,而Netty会一次又一次地调用流(ChannelBuffer)解码器,直到您有足够的数据来理解它为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。