Java: ¿Son posibles las lecturas y escrituras simultáneas en un SocketChannel de bloqueo a través de Object (In | Out) putStreams?

Creé unObjectInputSteam yObjectOutputStream en un bloqueoSocketChannel y estoy tratando de leer y escribir al mismo tiempo. Mi código es algo como esto:

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

El problema es que los bloques de escritura en la línea (B) se completan hasta que se completa la lectura en la línea (A) (bloques en el objeto devuelto porSelectableChannel#blockingLock() ). Pero la lógica de la aplicación dicta que la lectura no se completará hasta que se completen todas las escrituras, por lo que tenemos un interbloqueo efectivo.

SocketChannel javadocs dice que las lecturas y escrituras concurrentes son compatibles.

No experimenté tal problema cuando probé una solución Socket normal:

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

Sin embargo, entonces no puedo aprovechar los beneficios de rendimiento deFileChannel#transferTo(...)

Respuestas a la pregunta(4)

Su respuesta a la pregunta