При чтении содержимого ответа от объекта 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) Есть ли способ ограничить это?