Cómo leer eficientemente desde un socket usando Java NIO

stoy trabajando en una tarea que implica leer las cotizaciones comerciales de socket y necesito lograr una latencia mínima y un alto rendimiento.

omencé con el prototipo java nio más simple posible como este

ByteBuffer buf = ByteBuffer.allocateDirect(BUFFER_SIZE);
try {
       buf.clear();
       int numBytesRead = socketChannel.read(buf);

       if (numBytesRead == -1) {  
           socketChannel.close();
       } else {
           buf.flip();
           byte[] byteArrived = new byte[buf.remaining];
           buf.get(byteArrived,0,byteArrived.length);
           // here we send byteArrived to the parser
       }
   } catch (IOException e) {    
}

Supongo que es poco convincente crear una matriz de bytes [] cada vez, pero debido a la falta de conocimiento no sé cómo analizar ByteBuffer (porque necesito desarmar el protocolo de bytes en mensajes y pasarlos a la lógica empresarial). ¿Me puede recomendar cómo evitar la creación masiva de basura?

¿También me gustaría preguntar sobre las mejores prácticas para organizar la lectura de socket con baja latencia y alto rendimiento? Leí sobre LMAX y el marco disruptor y lograron 6 millones de transacciones en un solo hilo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta