Awọn igbasilẹ Java nipasẹ aṣoju nigbati getContentLengthLong ba da -1 pada
Ṣakoso Content-Length aimọ ninu igbasilẹ Java nipasẹ aṣoju lai ka metadata iwọn ti o sonu si idahun ofo.
getContentLengthLong() == -1 tumọ si pe ko si gigun akoonu ti a mọ ninu metadata ti o wa. Tẹsiwaju kika ṣiṣan naa ki o si fi awọn baitu ti a gba tabi ilọsiwaju aidaniloju han; ma ṣe ka si idahun ofo ati ma ṣe pin buffer ti iwọn odi.
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;
}
}
Asopọ naa ti wa ni tunto tẹlẹ ati output jẹ ti olupe. Tọju awọn akoko ipari asopọ ati kika ati eyikeyi aala iwọn ti ohun elo ni ayika lupu yii. Aṣiṣe I/O jẹ igbasilẹ ti o kuna, kii ṣe ipari aṣeyọri pẹlu awọn baitu diẹ.
Fi gigun wẹ ni ipele kanna. Chunked encoding ti HTTP/1.1 le rọpo Content-Length ati pe imuse HTTP yoo ṣe iyipada rẹ. Aṣoju le tun fi awoṣe rẹ. Yiyọ titẹ le tun jẹ ki iye baitu ti a ti yipada ti ohun elo yatọ si Content-Length ti a ti koodu.
Ti Transfer-Encoding ati Content-Length ba farahan papọ, ma ṣe yan nọmba ti o rọrun: fireemu HTTP fun koodu gbigbe ni aabo ati ka apapọ naa si aṣiṣe ti o ṣeeṣe. Fi iyẹn silẹ fun imuse ti o ni ibamu.
URL FTP nipasẹ ẹnu-ọna HTTP nilo ayẹwo ihuwasi URLConnection gangan; ko ṣe idaniloju pe gbogbo ẹni ti n wọle ori HTTP yoo huwa bii lori URL HTTP lasan ni gbogbo JDK. Lo length API pẹlu iye gigun nibiti metadata ba ṣe pataki, ki o si jẹrisi ohun elo ti o pari lodi si gigun tabi checksum ti o nilo gangan. Kika ara ko jẹ ki ori ti ko si tẹlẹ farahan.