如何在.NET中解压使用java.util.zip.Deflater压缩的流?

3

我有一个 java.util.zip.Deflater 生成的转储文件(可以确认它是有效的,因为Java的 Inflater 可以正常打开),现在需要在.NET中打开它:

byte[] content = ReadSample(sampleName);
var input = new MemoryStream(content);
var output = new MemoryStream();

using (var z = new System.IO.Compression.DeflateStream(input, CompressionMode.Decompress, true))
        z.CopyTo(output);

这个错误提示是:System.IO.InvalidDataException: 块长度与其补码不匹配

尝试使用 Ionic.Zlib.DeflateStream - 但是出现了类似的异常。我该怎么办?

转储以 97 86 E8 92 47 3D 40 EA 开始(如果那很重要)。

更新:很遗憾,我无法控制 Java 系统的操作,因为它正在生产中。

3个回答

1

解决平台相关的压缩和解压问题,请使用

方法一

在 .NET 中,您可以使用 System.IO.Compression.GZipStream

在 Java 中使用 java.util.zip.GZIPOutPutStream

方法二

您也可以使用7-zip。有适用于 c# 和 Java 的 SDK。


我在C#中使用Ionic.Zlib.GZipStream进行压缩,然后在Java中使用GZIPInputStream进行解压缩,效果很好。感谢您的建议 :) - Mazrick

1

由于您无法控制 Java 的输出,那么在您的 .NET 应用程序中集成一些 J# 以便直接使用 java.util.zip.Inflater 如何?请参阅 此 MSDN 文章

这个类似的问题 也可能有所帮助,特别是建议使用 #zipLib


0

我不相信Deflater和Inflater是标准格式,如果Java和C#的情况相同,我会感到惊讶。

我建议您使用标准格式,例如GZIP,在各个平台上应该都是相同的。


Deflater/Inflater(在Java或C#中)的整个目的是为zlib库提供高级API,该库还实现了GZIP。 - Sulthan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接