Java-Downloads iwwer Proxy, wann getContentLengthLong -1 zréckgëtt
Behandle eng onbekannt Content-Length bei engem Java-Download iwwer e Proxy, ouni feelend Gréisst-Metadaten als eidel Äntwert ze bewäerten.
getContentLengthLong() == -1 heescht, datt an den disponibelen Metadaten keng bekannt Inhaltlängt ass. Liest de Stroum weider a weis déi empfaange Bytes oder onbestëmmte Fortschrëtt; behandelt dat net als eidel Äntwert a reservéiert kee Puffer mat negativer Gréisst.
long expected = connection.getContentLengthLong();
long received = 0;
byte[] buffer = new byte[8192];
try (InputStream input = connection.getInputStream()) {
int count;
while ((count = input.read(buffer)) != -1) {
output.write(buffer, 0, count);
received += count;
}
}
D'Verbindung ass schonn ageriicht an output gehéiert dem Opruffer. Halt d'Verbindungs- a Läs-Zäitlimiten an all Gréisstlimit vun der Applikatioun ronderëm dës Schleif. En I/O-Fehler ass en feelgeschlagenen Download, net eng erfollegräich Oflaf mat manner Bytes.
Vergläich Längten op der selwechter Schicht. D'Chunked-Kodéierung vun HTTP/1.1 kann Content-Length ersetzen an gëtt vun der HTTP-Implementatioun dekodéiert. E Proxy kann se nei framen. D'Dekompression kann och dofir suergen, datt d'dekodéiert Bytezuel vun der Applikatioun vun enger kodéierter Content-Length ofwäicht.
Wann Transfer-Encoding an Content-Length allebéid optrieden, wiel keng bequem Zuel: HTTP-Framing gëtt der Transferkodéierung Virrang a behandelt d'Kombinatioun als méiglechen Fehler. Looss dës Auswäertung enger konformer Implementatioun.
Eng FTP-URL iwwer en HTTP-Gateway erfuerdert d'Prüfung vum konkrete URLConnection-Verhalen; et garantéiert net, datt sech all HTTP-Header-Zougrëff wéi bei enger gewéinlecher HTTP-URL an all JDK verhält. Benotz d'Length-API mat long-Wäert, wou Metadaten zielen, a validéier dat fäerdegt Artefakt géint déi tatsächlech erfuerdert Längt oder Prüfsumm. D'Liesen vum Body mécht en virdru fehlenden Header net sichtbar.