Mono & DeflateStream - PullRequest
       8

Mono & DeflateStream

0 голосов
/ 18 марта 2010

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

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

StackTrace:

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] в 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] в C: \ Cygwin \ TMP \ monobuild \ сборка \ BUILD \ моно-2.6.3 \ MCS \ класс \ System \ System.IO.Compression \ DeflateStream.cs: 214

на testtesttest.MainClass.Main (строка []) [0x00041] в C: \ Users \ ilukyanov \ Desktop \ Кассини \ GZipDemo \ Main.cs: 27

at (запуск-вызов оболочки) .runtime_invoke_void_object (объект, intptr, intptr, intptr)

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

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

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

Ответы [ 2 ]

1 голос
/ 18 марта 2010

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

0 голосов
/ 23 марта 2010

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

...