問題が発生しました。メッセージの受信にはnioソケットを使用しています。完全なメッセージが受信されると、受信したメッセージを保持する 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);
}