Sauke-jen Java ta hanyar wakili lokacin da getContentLengthLong ya dawo -1
Sarrafa Content-Length da ba a sani ba a cikin saukar Java ta wakili ba tare da ɗaukar bayanan girman da suka ɓace a matsayin amsa mara komai ba.
getContentLengthLong() == -1 yana nufin babu sanannen tsawon abun ciki a cikin bayanan da ke akwai. Ci gaba da karanta rafi kuma nuna bayt ɗin da aka karɓa ko ci gaba mara tabbas; kada ka ɗauke shi amsa mara komai kuma kada ka keɓe buffer mai girman mara kyau.
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;
}
}
An riga an saita haɗin, kuma mai kira ne ya mallaki output. Riƙe lokutan jira na haɗi da karatu da duk wani iyakar girma na aikace-aikacen a kewayen wannan madauki. Kuskuren I/O saukar da ta kasa ce, ba kammalawa mai nasara da ƙananan bayt ba.
Kwatanta tsawon a matsayi ɗaya. Chunked encoding na HTTP/1.1 na iya maye gurbin Content-Length kuma aiwatarwar HTTP ce ke yin decoding. Wakili na iya sake tsara shi. Decompression kuma na iya sa adadin bayt ɗin da aka yi decoding a aikace-aikacen ya bambanta da Content-Length da aka yi encoding.
Idan duka Transfer-Encoding da Content-Length suka bayyana, kada ka zaɓi lamba mai sauƙi: tsarin HTTP yana ba da fifiko ga encoding na canja wuri kuma yana ɗaukar haɗin a matsayin yiyuwar kuskure. Bar wannan binciken ga aiwatarwa mai dacewa.
URL na FTP ta hanyar ƙofar HTTP yana buƙatar duba ainihin halin URLConnection; ba ya ba da tabbacin kowane mai samun kan HTTP zai kasance kamar a kan URL na HTTP na yau da kullum a kowace JDK. Yi amfani da length API mai dogon ƙima inda bayanai ke da muhimmanci, kuma tabbatar da kayan da aka kammala da tsawon ko checksum da ake buƙata da gaske. Karanta jikin ba ya sa kan da ya ɓace a baya ya bayyana.