我有一个简单的代码
byte[] buffer = Encoding.UTF8.GetBytes("abracadabra");
MemoryStream ms = new MemoryStream();
DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress, false);
ms.Write(buffer, 0, buffer.Length);
DeflateStream ds2 = new DeflateStream(ms, CompressionMode.Decompress, false);
byte[] buffer2 = new byte[ms.Length];
ds2.Read(buffer2, 0, (int)ms.Length);
Console.WriteLine(Encoding.UTF8.GetString(buffer2));
从ds2读取时,我有以下内容:
堆栈跟踪:
at(包装器托管到原生) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int)< 0x00004>
at(包装器托管到原生) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int)< 0x00004>
在 System.IO.Compression.DeflateStream.ReadInternal (byte [],int,int)[0x00031] in C:\ cygwin的\ TMP \ monobuild \构建\ BUILD \单2.6.3 \ MCS \类\ SYSTEM \ System.IO.Compression \ DeflateStream.cs:192
在 System.IO.Compression.DeflateStream.Read (byte [],int,int)[0x00086] in C:\ cygwin的\ TMP \ monobuild \构建\ BUILD \单2.6.3 \ MCS \类\ SYSTEM \ System.IO.Compression \ DeflateStream.cs:214
在testtesttest.MainClass.Main (string [])[0x00041] in C:\ Users \用户ilukyanov \桌面\卡西尼\ GZipDemo \ Main.cs:27
at(wrapper runtime-invoke) .runtime_invoke_void_object (object,intptr,intptr,intptr)
此应用程序已请求 运行时以异常方式终止它 办法。请联系申请表 支持团队获取更多信息。
此问题出现在Mono 2.6.1& 2.6.3 ...
是否有任何已知的方法可以成功读取Mono中的DeflateStream?或者也许有一些具有相同功能的第三方开源组件?
答案 0 :(得分:1)
你可以使用Interop和DllImport本地调用zlib
如果你在Unix平台上,唯一的技巧就是在结构中使用正确的大小并在LD_LIBRARY_PATH中包含共享库。
答案 1 :(得分:0)
请提交针对Mono的错误。如果你这样做,可能会及时修复2.6.4。