gpt4 book ai didi

java nio和ByteBuffer问题

转载 作者:行者123 更新时间:2023-11-29 06:12:51 25 4
gpt4 key购买 nike

我遇到了一个问题。我使用 nio 套接字来接收消息。收到完整的消息后,我将保存接收到的消息的 dataBuffer 发送给另一个用户。但下面有异常(exception)。哪里有问题?我尝试调用 dataBuffer.duplicate() 并将其写出来。但是在接收方,读取操作抛出这样的异常。我必须分配一个新的 ByteBuffer 并制作一个新的消息副本并将其写出。在这种情况下,没有错误。但我不想要复制步骤。有没有其他办法解决?

抛出异常

java.nio.BufferOverflowException
at java.nio.HeapByteBuffer.put(Unknown Source)
at java.nio.ByteBuffer.put(Unknown Source)
at serviceHandlerPackage.ServiceHandler.readComplete(ServiceHandler.java:218)

代码

readEventHAndler(SocketChannel socket) {
readCompleteData(socket);
}

readCompleteData(Socket) {
ByteBuffer dataBuffer; //hold complete message
if(!dataComplete) return;
else process(dataBuffer);
}

process(dataBuffer) {
...

processHandler();

sendNext(dataBuffer);

}


sendNext(dataBuffer) {
write(dataBuffer);

}

最佳答案

每当您将数据读入缓冲区时,如果您想将缓冲区写出另一个 channel ,则需要在写入之前调用:buffer.flip()。如果您在读取时在同一个线程上写入,则无需复制缓冲区。

此外 - BufferOverflowException 意味着您向缓冲区中放入的数据超过了缓冲区的容量。这听起来像缓冲区没有调用 buffer.clear() 来将位置重置为零。

上面编写的代码不足以准确诊断问题所在。

关于java nio和ByteBuffer问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206336/

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