2012-02-01 21 views
2

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) 
+0

コードが正しい 重要な点は、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

答えて

0

Javaコードは完全に動作します。コメントのように、何とかエンコードされた値が間違っています。 JavaScriptの値を使って取得したコード化された値はy0jNycnXUSjPL8pJAQA=

です。この値をファイルにコピーしてdecompress1951を呼び出すと、実際には必要に応じてhello, worldに戻ります。あなたが使用しているコードが流通のウェブページ上の例とうまく同期しているように、javascriptの部分で何を言うべきか分からない。私はthe originalthe forkがあることに気付きました。多分そこに混乱がありますか?とにかくこのjsfiddleがあります。あなたがその1つを見たいと思えば、私は働くバージョンと見ることができると思います。

関連する問題