Java: Возможно ли одновременное чтение и запись в блокирующем SocketChannel через Object (In | Out) putStreams?

Я создалObjectInputSteam а такжеObjectOutputStream на блокировкеSocketChannel и я пытаюсь читать и писать одновременно. Мой код примерно такой:

socketChannel = SocketChannel.open(destNode);
objectOutputStream = new ObjectOutputStream(Channels.newOutputStream(socketChannel));
objectInputStream = new ObjectInputStream(Channels.newInputStream(socketChannel));

Thread replyThread = new Thread("SendRunnable-ReplyThread") {
    @Override
    public void run() {
        try {
            byte reply = objectInputStream.readByte();//(A)
            //..process reply
        } catch (Throwable e) {
            logger.warn("Problem reading receive reply.", e);
        }
    }
};
replyThread.start();

objectOutputStream.writeObject(someObject);//(B)
//..more writing

Проблема заключается в блоках записи в строке (B) до завершения чтения в строке (A) (блоки в объекте, возвращенномSelectableChannel#blockingLock() ). Но логика приложения диктует, что чтение не будет завершено, пока не завершатся все записи, поэтому у нас есть эффективная тупиковая ситуация.

SocketChannel Javadocs говорят, что одновременное чтение и запись поддерживается.

У меня не было такой проблемы, когда я попробовал обычное Socket-решение:

Socket socket = new Socket();
socket.connect(destNode);
final OutputStream outputStream = socket.getOutputStream();
objectOutputStream = new ObjectOutputStream(outputStream);
objectInputStream = new ObjectInputStream(socket.getInputStream());

Однако тогда я не могу воспользоваться преимуществами производительностиFileChannel#transferTo(...)

Ответы на вопрос(4)

Ваш ответ на вопрос