0 votes

Mono & DeflateStream

J'ai un code simple

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));

Et lors de la lecture de ds2, j'ai ce qui suit:

Stacktrace:

at (wrapper managed-to-native) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int) <0x00004>

at (wrapper managed-to-native) System.IO.Compression.DeflateStream.ReadZStream (intptr,intptr,int) <0x00004>

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

at System.IO.Compression.DeflateStream.Read (byte[],int,int) [0x00086] in 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] in C:\Users\ilukyanov\Desktop\Cassini\GZipDemo\Main.cs:27

at (wrapper runtime-invoke) .runtime_invoke_void_object (object,intptr,intptr,intptr)

Cette application a demandé à la Runtime de la terminer d'une manière inhabituelle. Veuillez contacter l'équipe de support de l'application pour plus d'informations.

Ce problème apparaît dans Mono 2.6.1 & 2.6.3...

Y a-t-il une façon connue de lire avec succès à partir de DeflateStream dans Mono? Ou peut-être y a-t-il des assemblies open-source de tiers offrant la même fonctionnalité?

1voto

weismat Points 4354

Vous pouvez appeler zlib de manière native en utilisant Interop avec DllImport.
Le seul truc est d'utiliser la bonne taille dans les structures et d'inclure la bibliothèque partagée dans LD_LIBRARY_PATH, si vous êtes sur une plateforme Unix.

0voto

mhutch Points 13238

Veuillez signaler un bug contre Mono. Si vous le faites, il pourrait être corrigé à temps pour la version 2.6.4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X