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.

Ähnlech Artikelen