我遇到了一个问题。我使用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);
}