1

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

谢谢,米海

4

3 回答 3

1

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

根据文档,.NET DeflateStream 生成原始的 deflate 格式,RFC 1951。我认为这就是您在 Visual Basic 中使用的格式。

此外,根据文档,Java 的 Inflater 类对 zlib 格式 RFC 1950 进行解码。zlib 格式是包含 zlib 标头和尾标的原始 deflate 格式。通常,Inflater 类会在来自 .NET 的 DeflateStream 的原始 deflate 数据上失败。然而幸运的是,Inflater 类为构造函数提供了nowrap 参数(将设置为 true),这允许 Inflater 在没有 zlib 包装器的情况下解码原始 deflate 数据。

所以这应该有效。DeflateStream 产生的数据的前 20 个十六进制字节是多少?

于 2012-07-06T15:57:08.207 回答
0

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

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

于 2012-07-10T08:20:33.090 回答
0

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

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

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

于 2012-07-06T15:32:17.373 回答