Как прочитать запрос, используя CompletionHandlers и ByteBuffer меньше, чем запрос?

Я использую Java 7 иAsynchronousSocketChannel, Я хотел бы прочитать запрос (например,HTTP POST) но я изо всех сил пытаюсь найти хорошее решение, чтобы прочитать полный запрос, если он больше, чем размерByteBuffer Я использую. Например. еслиByteBuffer составляет 4048 байт, а HTTP POST содержит изображение размером более 4 КБ.

Есть ли хорошее рекурсивное решение или цикл для этого?

Вот мой код для запросов на чтение:

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

    });
}

И где я написал:

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

это выглядит как хорошее место для повторного использования кода, но я не могу придумать хорошее решение. Есть ли способ, которым я могу использовать CompletionHandler здесь? Любое предложение для чтения полного запроса с ограниченнымByteBuffer?

Я хотел бы решить эту проблему неблокирующим и асинхронным способом.

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

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