首页 > 编程知识 正文

ByteBuffer,remaining用法

时间:2023-05-04 01:50:40 阅读:134994 作者:1272

我得到了缓冲区这个bug。 有len长度的可用数据。 我们要做的就是根据我们自己的协议结构,将这个buffer转换成遵循我们协议的packet。 再用后面的业务逻辑代码处理。 此时,定义自己的通信协议byte的头部,用于验证数据条的合法性。 2byte包长度(通常为4byte,即使用一个int ),其馀内容为可变长度的包本身。 现在我们得到了buffer。 此时,有分包(粘贴数据包)和组成数据包(数据包没有完全接收到)两种情况。 虽然好像很头痛,但是实际上要获得packet就需要知道数据包的真正长度,也就是2byte的内容。 转移到short后,设为PACKET_LEN。 然后,我们只需要分割PACKET_LEN个长度的byte来等待就可以了。 那是我们班真正需要的东西。 当然,这个过程曾陷入误会。 然后,只有被人教训了才关注无用的东西,增加了代码的复杂性。 然后进入代码。 目前,我的结构是服务器使用nio,nio框架将buffer封装为java.nio.ByteBuffer。 基本实现是固定长度的byte[],它只是封装了byte操作的快捷方式。 既然它被封装了,我们就必须利用。 ByteBuffer.remaining (),此方法功能最强大,返回剩馀的可用长度。 该长度是实际读取的数据的长度,最自然的是基数组的长度。 这样,这个ByteBuffer看起来像一个可标记的流。 ByteBuffer.get(byte[] ),bytebuffer到byte ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。