Ich versuche, Körper einer HTTP-Anfrage mit gziped Daten + chunked Kodierung zu erhalten. Der Code ich verwende:Das Lesen von gziped chunked Daten HTTP 1.1 in Java
byte[] d; // *whole* request body
ByteArrayOutputStream b = new ByteArrayOutputStream();
int c = 0;
int p = 0;
int s = 0;
for(int i = 0; i < d.length; ++i) {
if (s == 0 && d[i] == '\r' && d[i + 1] == '\n') {
c = Integer.parseInt(new String(Arrays.copyOfRange(d, p+1, i)), 16);
if(c == 0) break;
b.write(Arrays.copyOfRange(d, i+2, i+2+c));
p = i + 1;
i += c + 1;
s = 1;
} else if (s == 1 && d[i] == '\r' && d[i + 1] == '\n') {
p = i + 1;
s = 0;
}
}
// here comes the part where I decompress b.toByteArray()
Kurz gesagt, liest das Programm Chunkgröße und schreibt Teil des Ganzen Anfrage (von ‚\ n‘ auf die ‚\ n‘ + Chunkgröße) an die ByteArrayOutputStream b
und wiederholen Sie die verarbeiten, bis Chunk mit der Größe 0 gefunden wird.
Wenn ich versuche, solche Daten zu dekomprimieren, bekomme ich immer einige beschädigte Daten Warnung, z. java.util.zip.ZipException: invalid distance too far back
.
Irgendwelche Gedanken, was ich falsch machen könnte?
Heilige Moly !!! Nehmen Sie die Kopfgeld-Art Sir. Bearbeiten: Es ist verfügbar in 22h. – carobnodrvo
Das ist mein [zweites "Heiliges *"] (http://stackoverflow.com/questions/44032813/start-native-terminal-with-command-arguments-java/44091598?noredirect=1#comment75206712_44091598) Kommentar heute, danke;) –