在java中解压缩一个在visual basic中压缩的字符串

时间:2012-07-06 14:33:51

标签: java vb.net compression

我尝试使用DeflateStream解压缩(在Java中)在Visual Basic中压缩的字符串时遇到问题。我做了一些研究,看到并尝试了许多使用Inflater和InflaterOutputStream在Java中解压缩的代码。找不到任何代码。我浏览了很多网站,并在google上搜索了很多方法。我可以说谷歌的第3页涉及java,inflater / deflater压缩,visual basic,deflaterStream已经被读取,但没有成功。我想知道这件事是否可行(而且应该是因为我在Java和C#之间找到了压缩/解压缩的方法:http://www.dreamincode.net/forums/topic/243808-compression-and-decompression-between-java-and-c%23/) 我还想知道是否存在关于Visual Basic DeflateStream和Java模拟类Inflater / Deflater的兼容性问题。如果有人遇到类似问题,我也非常感谢一些代码片段。

谢谢, 米哈伊

3 个答案:

答案 0 :(得分:1)

尝试在Inflater类中设置nowrap参数。

根据documentation,.NET DeflateStream生成原始deflate格式RFC 1951.我认为这是您从Visual Basic中使用的内容。

同样根据documentation,Java的Inflater类解码zlib格式RFC 1950.zlib格式是用zlib头和尾部包装的原始deflate格式。通常,Inflater类会因.NET的DeflateStream中的原始deflate数据而失败。幸运的是,Inflater类为构造函数提供了nowrap parameter(将设置为true),这允许Inflater在没有zlib包装器的情况下解码原始deflate数据。

这应该有效。 DeflateStream生成的数据的十六进制前20个字节是什么?

答案 1 :(得分:0)

根据我的阅读,java的deflate / inflate使用Zlib。 VB用什么来膨胀?我没有谷歌这个,但一些参考似乎表明它使用ZIP,没有zlib。

您是否尝试过运行file compressed_file以确定其压缩的格式?

在任何情况下,您可能都想尝试使用ZIP算法解压缩apache commons。

答案 2 :(得分:0)

好的,所以我终于设法解决了这个问题。这是一个初学者错误,但它花了我足够长的时间来解决它。这个问题的代表是,当我读取初始文件(压缩和加密)时,我将文件内容保存在内存中,而不是直接将内容作为字节数组读取。当然,字符串编码不支持某些字节,它们会丢失,这就是无法识别压缩格式的原因。 Java中的Inflater / Deflater类与vb.net中的DeflateStream类兼容!

非常感谢您的帮助和帮助。