【问题标题】:How to decompress stream deflated with java.util.zip.Deflater in .NET?如何在 .NET 中使用 java.util.zip.Deflater 解压缩流?
【发布时间】:2012-01-19 09:57:50
【问题描述】:

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 方。

【问题讨论】:

    标签: java .net compression zlib deflate


    【解决方案1】:

    既然您无法控制 Java 输出,那么在您的 .NET 应用程序中集成一些 J# 以便直接使用 java.util.zip.Inflater 怎么样?见this MSDN article

    This similar question 也可能有帮助,尤其是#zipLib 的建议。

    【讨论】:

      【解决方案2】:

      解决平台依赖的压缩和解压使用

      方法一

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

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

      方法 2

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

      【讨论】:

      • 我很幸运在 c# 中使用 Ionic.Zlib.GZipStream 进行压缩,然后在 Java 中使用 GZIPInputStream 进行解压缩。谢谢你的建议:)
      【解决方案3】:

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

      我建议您使用标准格式,例如 GZIP,跨平台应该相同。

      【讨论】:

      • -1 Deflater/Inflater(在 Java 或 C# 中)的全部意义在于为同样实现 GZIP 的 zlib 库提供高级 API。
      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多