我在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派对。
答案 0 :(得分:1)
要解决平台相关的压缩和解压缩,请使用
<强>方法-1 强>
在.NET中,您可以使用System.IO.Compression.GZipStream
在Java中使用 java.util.zip.GZIPOutPutStream
<强>方法-2 强>
您也可以使用7-zip。有一个适用于c#和Java的SDK。
答案 1 :(得分:1)
由于您无法控制Java输出,如何在.NET应用程序中集成一些J#以直接使用java.util.zip.Inflater
?请参阅this MSDN article。
This similar question也可能有所帮助,尤其是#zipLib的建议。
答案 2 :(得分:0)
我不相信Deflater和Inflater是标准格式,如果它在Java和C#中是相同的,我会感到惊讶。
我建议您使用标准格式,例如GZIP,它应该在不同平台上相同。