¿Cómo leer una solicitud utilizando CompletionHandlers y un ByteBuffer más pequeño que la solicitud?

Estoy usando Java 7 yAsynchronousSocketChannel. Me gustaría leer una solicitud (por ejemplo,HTTP POST) pero estoy luchando para encontrar una buena solución para leer la solicitud completa, si es más grande que el tamaño delByteBuffer Estoy usando. P.ej. Si elByteBuffer tiene 4048 bytes y el HTTP POST contiene una imagen que es más grande que 4kB.

¿Hay alguna buena solución recursiva o bucle para esto?

Aquí está mi código para leer las solicitudes:

public void readRequest(final AsynchronousSocketChannel ch) {
    final ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
    final StringBuilder strBuilder = new StringBuilder();
    final CharsetDecoder decoder = Charset.forName("US-ASCII").newDecoder();

    ch.read(buffer, null, new CompletionHandler<Integer, Void>() {

        public void completed(Integer bytes, Void att) {

            buffer.flip();                          
            try {
                decoder.reset();
                strBuilder.append(decoder.decode(buffer).toString());
            } catch (CharacterCodingException e) {
                e.printStackTrace();
            }           
            buffer.clear();         

            // More data to read or send response
            if(bytes != -1) {

                // More data to read
                ch.read(...);

            } else {

                // Create and send a response

            }
        }

        public void failed(Throwable exc, Void att) {
            exc.printStackTrace();
        }

    });
}

Y donde he escrito:

// More data to read
ch.read(...);

Parece un buen lugar para reutilizar el código, pero no puedo encontrar una buena solución. ¿Hay alguna manera de que pueda reutilizar el Gestor de finalización aquí? Cualquier sugerencia para leer una solicitud completa con un limitadoByteBuffer?

Me gustaría resolver esto de forma no bloqueante y asíncrona.

Respuestas a la pregunta(1)

Su respuesta a la pregunta