3

之后我有一个转储java.util.zip.Deflater(可以确认它是有效的,因为 JavaInflater可以很好地打开它)并且需要在 .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 方。

4

3 回答 3

1

解决平台相关的压缩和解压使用

方法一

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

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

方法二

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

于 2011-12-13T14:40:59.097 回答
1

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

这个类似的问题也可能会有所帮助,尤其是#zipLib的建议。

于 2011-12-13T16:08:57.433 回答
0

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

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

于 2011-12-13T14:22:24.553 回答