gzippedデータ+チャンクエンコーディングでHTTPリクエストの本体を取得しようとしています。コード私が使用しています:要するにgzipで圧縮されたチャンクデータを読むJavaでHTTP 1.1
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()
を、プログラムはチャンクサイズを読み取り、(「\ n」は「\ n」は+チャンクサイズまでから)ByteArrayOutputStream b
に全体の要求の一部を書き込み、繰り返しサイズ0のチャンクが見つかるまで処理します。
このようなデータを解凍しようとすると、私はいつも破損したデータ警告を受け取ります。 java.util.zip.ZipException: invalid distance too far back
。
私が間違っていると思われることは何ですか?
Holy moly !!!奨励金の種類を取る。編集:それは22hで利用可能です。 – carobnodrvo
これは私の[第2の "聖*"](http://stackoverflow.com/questions/44032813/start-native-terminal-with-command-arguments-java/44091598?noredirect=1#comment75206712_44091598)コメントです。 ) –