Mono & DeflateStream

У меня есть простой код

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, у меня есть следующее:

Трассировки стека:

в (управляемый оболочкой) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int) <0x00004>

в (управляемый оболочкой) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int) <0x00004>

в System.IO.Compression.DeflateStream.ReadInternal (byte[],int,int) [0x00031] в C:\cygwin\tmp\monobuild\build\BUILD\mono-2.6.3\mcs\class\System\System.IO.Compression\DeflateStream.cs:192

в System.IO.Compression.DeflateStream.Read (byte[],int,int) [0x00086] в C: \ cygwin \ tmp \ monobuild \ build \ BUILD \ mono-2.6.3 \ mcs \ class \ System \ System. IO.Compression \ DeflateStream.cs: 214

at testtesttest.MainClass.Main (string []) [0x00041] в C: \ Users \ ilukyanov \ Desktop \ Cassini \ GZipDemo \ Main.cs: 27

at (обертка runtime-invoke) .runtime_invoke_void_object (объект,intptr,intptr,intptr)

Это приложение запросило среду выполнения прекратить его необычным способом. Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации.

Эта проблема появляется в Mono 2.6.1 и 2.6.3...

Есть ли какой-нибудь известный способ успешного чтения из DeflateStream в Mono? Или, может быть, есть какие-то сторонние сборки с открытым исходным кодом с той же функциональностью?

2 ответа

Решение

Вы можете вызвать zlib изначально, используя Interop с DllImport.
Единственная хитрость заключается в том, чтобы использовать правильный размер в структурах и включить общую библиотеку в LD_LIBRARY_PATH, если вы работаете на платформе Unix.

Пожалуйста, отправьте сообщение об ошибке Mono. Если вы это сделаете, это может быть исправлено вовремя для 2.6.4.

Другие вопросы по тегам