gpt4 book ai didi

Java 来自套接字 NIO ByteBuffer 的部分消息处理

转载 作者:行者123 更新时间:2023-12-01 09:57:58 24 4
gpt4 key购买 nike

我有一个存储多条消息的缓冲区。假设缓冲区是 50 字节(让我尝试用元代码来说明这一点)

-------------------- (50 byte empty buffer)

我的消息大小为 20。在给定的套接字读取上,我可能会收到 1 条消息

 |111111111|-----------  (50 byte buffer with 1 20 byte message

或者两条消息

 |111111111|222222222|----

但是如果我收到三条消息,我最终会收到部分第三条消息

 |111111111|222222222|3333 (TRUNCATE)

在下一次套接字读取时,第三条消息的其余部分将通过,字节流包含消息 3 的后半部分:

>>> socket.read() 
33334444444455555555 ....

此外,我知道第三条消息开始的位置,因此我想简单地将第三条消息的内容保留在缓冲区中。我认为做紧凑会是这样:

>>> readbuffer.compact()

然后只需将相同的缓冲区传递回 socket.read()

>>> socket.read(readBuffer)

理想情况下,这会填满我的缓冲区

33333333|44444444|55555...

但是,我不认为压缩并简单地将 readbuffer 传递回 sock.read() 是正确的方法。

是否有一个众所周知的解决方案可以以这种方式处理部分消息?我可以想到很多可以尝试的事情,但这必须是一个常见问题。我想尽可能避免中间创建缓冲区,但想不出不调用某种残留缓冲区的解决方案。

谢谢

最佳答案

你错了。使用 compact(),然后在下一个 read() 中重用缓冲区正是正确的方法。

关于Java 来自套接字 NIO ByteBuffer 的部分消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com