(必要吗?ByteBuffer.wrap(buffer.array())的副作用



这里的背景是我正在使用一个码头websocket服务器连接到客户端上的javascript。 服务器具有套接字终结点,您可以通过这些终结点发送ByteBuffer

奇怪的是,如果我建立一个数组bytes[]并发送ByteBuffer.wrap(byteArray),它可以工作。

如果我使用 ByteBuffer.allocatebuffer.put(..) 构建ByteBuffer,然后以相同的方式发送,客户端会收到一条长度为零的消息。

踢球的是,如果我在发送之前建立字节缓冲区,我会发送 ByteBuffer.wrap(buffer.array()),一切正常!

因此,无论 websocket 服务器中发生了什么,显然我缺少一些解包和包装字节的副作用。 我认为这一切都由内存中的相同数据支持,所以我认为我为此付出了太多代价,但它感觉很糟糕,我很想知道这里发生了什么!

谢谢!

编辑:FWIW,它与字节序无关 - 两个字节序(?(都适用于ByteBuffer.wrap(buffer.array()),否则不起作用。

您需要在发送缓冲区之前重置缓冲区的位置,因为put方法(采用索引的方法除外(在调用时会增加位置,并且 jetty 显然使用该位置来决定发送什么。

您可以使用flip执行此操作,它将位置设置为 0,丢弃标记,并将限制设置为前一个位置,或者rewind不会更改缓冲区的限制,或者position如果标记大于您传递它的新位置并且不更改限制,则将丢弃标记。

wrap(byte[])之所以有效,是因为它将位置设置为 0,并将您传递的数组长度限制

设置为限制。

相关内容

  • 没有找到相关文章

最新更新