Lawrlwythiadau Java drwy brocsi pan fo getContentLengthLong yn dychwelyd -1
Delio ag Content-Length anhysbys mewn lawrlwythiad Java drwy brocsi heb drin metadata maint ar goll fel ymateb gwag.
Mae getContentLengthLong() == -1 yn golygu nad oes hyd cynnwys hysbys yn y metadata sydd ar gael. Parhau i ddarllen y ffrwd a dangos y beitiau a dderbyniwyd neu gynnydd amhenodol; peidiwch â'i drin fel ymateb gwag na dyrannu byffer maint negyddol.
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;
}
}
Mae'r cysylltiad eisoes wedi'i ffurfweddu ac mae output yn eiddo i'r galwr. Cadw'r terfynau amser cysylltu a darllen ac unrhyw derfyn maint cymhwysiad o amgylch y ddolen hon. Mae gwall I/O yn lawrlwythiad wedi methu, nid cwblhau llwyddiannus gyda llai o feitiau.
Cymharwch hydau ar yr un haen. Gall codio chunked HTTP/1.1 ddisodli Content-Length ac mae'n cael ei ddatgodio gan y gweithrediad HTTP. Gall procsi ei ail-fframio. Gall dadgywasgu hefyd wneud cyfrif beitiau datgodiedig y cymhwysiad yn wahanol i Content-Length wedi'i godio.
Os yw Transfer-Encoding a Content-Length ill dau yn ymddangos, peidiwch â dewis rhif cyfleus: mae fframio HTTP yn rhoi blaenoriaeth i godio trosglwyddo ac yn trin y cyfuniad fel gwall posibl. Gadewch y dosrannu hwnnw i weithrediad cydymffurfiol.
Mae angen gwirio ymddygiad concrit URLConnection ar gyfer URL FTP drwy borth HTTP; nid yw'n gwarantu bod pob cyrchydd pennawd HTTP yn ymddwyn fel ar URL HTTP cyffredin ym mhob JDK. Defnyddiwch yr API hyd â gwerth hir lle mae metadata yn bwysig, a dilysu'r artifact gorffenedig yn erbyn yr hyd neu'r swm gwirio sydd ei angen mewn gwirionedd. Nid yw darllen y corff yn gwneud pennawd a oedd yn absennol o'r blaen yn ymddangos.