Muat turun Java melalui proksi apabila getContentLengthLong mengembalikan -1
Kendalikan Content-Length yang tidak diketahui dalam muat turun Java melalui proksi tanpa menganggap metadata saiz yang hilang sebagai respons kosong.
getContentLengthLong() == -1 bermaksud tiada panjang kandungan yang diketahui dalam metadata yang tersedia. Teruskan membaca aliran dan paparkan bait yang diterima atau kemajuan tidak tentu; jangan anggapnya respons kosong dan jangan peruntukkan penimbal bersaiz negatif.
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;
}
}
Sambungan sudah dikonfigurasikan dan output dimiliki pemanggil. Kekalkan tamat masa sambungan dan bacaan serta sebarang had saiz aplikasi di sekeliling gelung ini. Ralat I/O ialah muat turun yang gagal, bukan penyiapan berjaya dengan bait yang lebih sedikit.
Bandingkan panjang pada lapisan yang sama. Pengekodan chunked HTTP/1.1 boleh menggantikan Content-Length dan dinyahkod oleh pelaksanaan HTTP. Proksi boleh membingkaikannya semula. Penyahmampatan juga boleh menyebabkan kiraan bait ternyahkod aplikasi berbeza daripada Content-Length yang dikodkan.
Jika Transfer-Encoding dan Content-Length kedua-duanya muncul, jangan pilih nombor yang mudah: pembingkaian HTTP memberi keutamaan kepada pengekodan pemindahan dan menganggap gabungan itu sebagai kemungkinan ralat. Serahkan penghuraian itu kepada pelaksanaan yang patuh.
URL FTP melalui get laluan HTTP memerlukan pemeriksaan tingkah laku URLConnection konkritnya; ia tidak menjamin setiap pengakses kepala HTTP berkelakuan seperti pada URL HTTP biasa dalam setiap JDK. Gunakan API panjang bernilai panjang di tempat metadata penting, dan sahkan artifak yang siap terhadap panjang atau checksum yang benar-benar diperlukan. Membaca badan tidak membuat kepala yang sebelum ini tiada muncul.