JavaScriptコードを書きました。 は、BASE64で圧縮しjavascript deflateとjava.util.zip.Deflaterの相違点
function base64 (str) {
return new Buffer(str).toString("base64");
}
function deflate (str) {
return RawDeflate.deflate(str);
}
function encode (str) {
return base64(deflate(str));
}
var str = "hello, world";
console.log("Test Encode");
console.log(encode(str));
私は2f8d48710d6e4229b032397b2492f0c2
に "こんにちは、世界を" 変換収縮と私は、java
私は、ファイルのSTRを置くには、この文字列(2f8d48710d6e4229b032397b2492f0c2)を解凍したいですその後:
:public static String decompress1951(final String theFilePath) {
byte[] buffer = null;
try {
String ret = "";
System.out.println("can come to ret");
InputStream in = new InflaterInputStream(new Base64InputStream(new FileInputStream(theFilePath)), new Inflater(true));
System.out.println("can come to in");
while (in.available() != 0) {
buffer = new byte[20480];
*****line 64 excep happen int len = in.read(buffer, 0, 20480);
if (len <=0) {
break;
}
ret = ret + new String(buffer, 0, len);
}
in.close();
return ret;
} catch (IOException e) {
System.out.println("Has IOException");
System.out.println(e.getMessage());
e.printStackTrace();
}
return "";
}
しかし、私は例外を持っています
java.util.zip.ZipException: invalid stored block lengths
at java.util.zip.InflaterInputStream.read(Unknown Source)
at com.cnzz.mobile.datacollector.DecompressDeflate.decompress1951(DecompressDeflate.java:64)
at com.cnzz.mobile.datacollector.DecompressDeflate.main(DecompressDeflate.java:128)
コードが正しい 重要な点は、InflaterInputStreamの2番目のパラメータ の新しいInflater(true)です。このパラメータがなければ、コードは機能しますが、純粋なdefalterではありません。 おそらく RFC1950 zlib:[基本リンク](http://www.ietf.org/rfc/rfc1950.txt)のdiffです。 (なし) RFC 1951 deflate:[基本リンク](http://www.ietf.org/rfc/rfc1951.txt)。 (新しいInflater(true)で) "hello、world"の変換された文字列は2f8d48710d6e4229b032397b2492f0c2ではありません。だから私はそれを解決できません – littletiger