我遇到了一个问题。我使用 nio socket 来接收消息。收到完整消息后,我将保存收到消息的 dataBuffer 发送给另一个用户。但下面有例外。问题出在哪里?我尝试调用 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);
}