2012-02-01 142 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中

我把海峡的文件进行解压此字符串(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的第二个参数 新的Inflater(true)。如果没有这个参数,代码可以工作,但不是纯粹的defalter。 也许与 RFC1950 zlib:[基本链接](http://www.ietf.org/rfc/rfc1950.txt)的区别。 (不含) RFC 1951 deflate:[基本链接](http://www.ietf.org/rfc/rfc1951.txt)。 (与新的Inflater(真)) 而“hello,world”的转换字符串不是2f8d48710d6e4229b032397b2492f0c2。这就是为什么我无法解决它 – littletiger 2012-02-01 11:27:59

回答

0

上面的java代码完美地工作。正如在评论中,你以某种方式得到了错误的编码值。编码值我使用JavaScript值y0jNycnXUSjPL8pJAQA=

然后,当你复制此值,以文件,并调用decompress1951,你其实回来hello, world的要求。不知道在javascript部分说什么,因为您使用的代码似乎与分发网页上的示例很好地同步。我注意到有the originalthe fork所以也许有一些混淆呢?无论如何,有这jsfiddle,如果你想看看那个,我认为它可以被看作是一个工作版本。