Чтение верхних n байтов из объекта HTTP-ответа в Apache http-client - PullRequest
1 голос
/ 28 мая 2020

При чтении содержимого ответа от объекта HTTP я нарушу чтение данных l oop, если предел достигнут.

Мой код будет:

       HttpEntity entity = response.getEntity();
       try (InputStream is = entity.getContent()) {
            int size = (int) entity.getContentLength();
            int readBufferLength = size;

            if (readBufferLength <= 0) {
                readBufferLength = 4096;
            }

            readBufferLength = Math.min(readBufferLength, 1000000);

            ByteArrayBuffer buffer = new ByteArrayBuffer(readBufferLength);

            byte[] tmpBuff = new byte[4096];
            int dataLength;

            boolean truncated = false;
            while ((dataLength = is.read(tmpBuff)) != -1) {
                if (maxBytes > 0 && (buffer.length() + dataLength) > 1000000) {
                    truncated = true;
                    dataLength = maxBytes - buffer.length();
                }
                buffer.append(tmpBuff, 0, dataLength);
                if (truncated) {
                    break;
                }
            }
            return buffer.toByteArray();
        }

Предположим, если Я скачиваю файл размером 10 МБ, согласно моему коду, я прекращу чтение данных, если будет достигнут предел в 1 МБ. Но при закрытии потока ввода контента по умолчанию он загружает оставшиеся 9 МБ, и после этого только я могу использовать и освобождать соединение.

Здесь мой вопрос: 1) Почему он загружает оставшиеся 9 МБ содержимое при закрытии соединения 2) Есть ли способ ограничить это?

...