Como ler uma solicitação usando o CompletionHandlers e um ByteBuffer menor que a solicitação?

Eu estou usando o Java 7 eAsynchronousSocketChannel. Gostaria de ler uma solicitação (por exemplo,HTTP POST) mas estou com dificuldades para encontrar uma boa solução para ler o pedido completo, se for maior que o tamanho doByteBuffer Estou a usar. Por exemplo. se oByteBuffer é 4048 bytes e o HTTP POST contém uma imagem maior que 4kB.

Existe alguma solução recursiva legal ou loop para isso?

Aqui está o meu código para solicitações de leitura:

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();
        }

    });
}

E onde eu escrevi:

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

parece um bom lugar para reutilização de código, mas não consigo encontrar uma boa solução. Existe alguma maneira que eu possa reutilizar o CompletionHandler aqui? Qualquer sugestão para ler um pedido completo com um limiteByteBuffer?

Eu gostaria de resolver isso de uma maneira não-bloqueante e assíncrona.

questionAnswers(1)

yourAnswerToTheQuestion