2012-07-06 160 views
1

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

感谢, 米哈伊

回答

0

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

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

0

从我读过,Java的放气/充气使用zlib的。 VB用什么来膨胀?我没有谷歌这个,但一些参考似乎表明它使用ZIP,没有zlib。

您是否尝试过运行file compressed_file来确定它被压缩的格式?

无论如何,你可能想尝试使用ZIP算法解压缩apache commons。

+0

你好,谢谢你的回答。我不得不提到我正在尝试解压缩的文件也被加密了。所以我解密了它,之后我到了现在的这一步。我尝试解压缩内存中保存的解密结果,所以我没有正确的文件。我尝试使用apache commons来解压,但没有成功。 – mihai 2012-07-09 14:53:57

+0

您应该将内容保存到磁盘,至少在您了解如何正确解压缩之前。 – WhyNotHugo 2012-07-09 20:08:15

+0

我也试过,将内容保存在一个文件中,并解压缩该文件,但没有成功。我在该文件上运行了文件命令,但结果是“数据”,这不是很确定。 – mihai 2012-07-10 08:00:14

1

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

根据documentation,.NET DeflateStream生成原始缩放格式RFC 1951.我推测这就是您在Visual Basic中使用的内容。

也根据documentation,Java的Inflater类解码zlib格式,RFC 1950.zlib格式是用zlib头和尾部包装的原始缩放格式。正常情况下,Inflater类将会从.NET的DeflateStream的原始缩放数据上失败。幸运的是,Inflater类为构造函数提供了nowrap parameter(将设置为true),这允许Inflater在不使用zlib包装器的情况下解码原始缩放数据。

所以,应该工作。 DeflateStream生成的数据的前十个字节是什么?

+0

谢谢你的建议,但我已经这样做了,并没有奏效。 – mihai 2012-07-09 07:01:37

+0

再次感谢您的建议。为了解决这个问题,我收集了一些解压缩的方法(gzip,bzip2,inflater,来自apache commons的zip等),并注意到解压缩的变体有nowrap参数集。所以再次感谢你。 – mihai 2012-07-10 08:24:20