[Mono-dev] Status of System.IO.Compression (both Deflate and Gzip)
Miguel de Icaza
miguel at novell.com
Tue Jul 24 11:21:00 EDT 2007
Hello folks,
Please file a bug report.
> Hi,
>
> I noticed the same problem. There seem to be a problem when reading more
> than once the same compressed stream. If possible, try reading everything
> in one call (you need to know the actual size of the stream once
> decompressed). This works for me.
>
> -----Message d'origine-----
> De : mono-devel-list-bounces at lists.ximian.com
> [mailto:mono-devel-list-bounces at lists.ximian.com] De la part de David
> Wolinsky
> Envoyé : Monday, July 23, 2007 4:14 PM
> À : mono-devel
> Objet : [Mono-dev] Status of System.IO.Compression (both Deflate and Gzip)
>
> I am not having luck with either class using 1.2.4, they both compile but
> the results never come out right... perhaps they aren't fully implemented
> yet?
>
> Here's what I'm using...
>
> using System;
> using System.IO.Compression;
> using System.IO;
> using System.Security.Cryptography;
>
> namespace poop {
> public class poopie {
> public static void Main() {
> byte [] data = new byte[100000];
> for (int i = 0; i < 100000; i++) {
> data[i] = (byte) i;
> }
> MemoryStream dataStream = new MemoryStream (data);
> MemoryStream backing = new MemoryStream ();
> GZipStream compressing = new GZipStream (backing,
> CompressionMode.Compress, true);
> CopyStream (dataStream, compressing);
> dataStream.Close();
> // This next method causes an exception and if uncommented still it doesn't
> work right...
> compressing.Close();
> backing.Seek (0, SeekOrigin.Begin);
> GZipStream decompressing = new GZipStream (backing,
> CompressionMode.Decompress);
> MemoryStream output = new MemoryStream ();
> CopyStream (decompressing, output);
> Console.WriteLine(backing.Length);
> for (int i = 0; i < backing.Length; i++) {
> Console.WriteLine(backing.GetBuffer()[i]);
> }
> Console.WriteLine(compare_buffers (data, output.GetBuffer(), (int)
> data.Length));
> decompressing.Close();
> output.Close();
> }
>
> private static void CopyStream (Stream src, Stream dest)
> {
> byte[] array = new byte[1024];
> int bytes_read;
> bytes_read = src.Read (array, 0, 1024);
> while (bytes_read != 0) {
> dest.Write (array, 0, bytes_read);
> bytes_read = src.Read (array, 0, 1024);
> }
> }
>
> private static bool compare_buffers (byte[] first, byte[] second, int
> length)
> {
> if (first.Length < length || second.Length < length) {
> return false;
> }
> for (int i = 0; i < length; i++) {
> if (first[i] != second[i]) {
> return false;
> }
> }
> return true;
> }
> }
> }
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
More information about the Mono-devel-list
mailing list