Я перехожу на Apache httpclient5 с Apache httpclint 4.
Я использую процесс запроса Zero Copy Get следующим образом. https://svn.apache.org/viewvc/httpcomComponents/httpasyncclient/branches/4.1.x/httpasyncclient/src/examples/org/apache/http/examples/nio/client/ZeroCopyHttpExchange.java?view=markup
Я загружаю большие файлы с помощью Zero Copy.
Но я не могу найти процесс Zero Copy в файле httpclient5.
Как я могу перенести этот процесс?
Спасибо.
Я прочитал следующий документ. https://hc.apache.org/httpcomComponents-client-5.3.x/index.html





Передача тела сообщения без копирования возможна с помощью HTTP/1.1 только через простые соединения. Он не может работать с HTTP любой версии через TLS, с HTTP/2 (за исключением крошечных сообщений, которые могут уместиться в один кадр ДАННЫХ), а также с HTTP/1.1 и фрагментарным кодированием.
В целом, учитывая широкое распространение TLS, усилия не оправдали себя, поэтому на данный момент в HC 5.x нет поддержки передачи тела сообщения с нулевым копированием.
Нулевое копирование буквально означает нулевое копирование, вообще никакого промежуточного буфера в памяти. Содержимое сообщения передается напрямую из сетевого сокета в файл. Обычное копирование включает небольшой промежуточный буфер. Ни при каких обстоятельствах все тело сообщения не должно быть буферизовано в памяти перед сохранением в файл. По крайней мере, не Apache HttpClient.
Я понял, что буферизуется немного данных, но не все данные. При использовании httpclient4 казалось, что все данные будут буферизованы, поэтому я спросил об этом. Большое спасибо. Я дам ему попробовать.
Это не вариант. github.com/apache/httpasyncclient/blob/4.1.x/httpasyncclient/… Однако вам следует перейти на HC 5.x.
Мне жаль. Я понимаю, что память не используется при использовании Zero-Copy в HC 4. Когда Zero-Copy не используется в HC 4, моя проверка заключалась в том, что все данные файла были помещены в память. Я думал, что то же самое произойдет, если не использовать Zero-Copy в HC 5, но я понимаю, что это не так.
Этого не должно быть и с HC 4.x. Операция нулевого копирования — нет промежуточного буфера, прямое копирование из сокета в файл, Обычная операция — копирование через небольшой промежуточный буфер.
Я так думаю. Большое спасибо за Ваш ответ!
Спасибо. Это я понял. Однако мне кажется, что при загрузке файла его необходимо извлечь в память, но значит ли это, что загрузка большого файла невозможна?