GZipStream Class and Compression

Discussion in 'MCTS' started by abbamilkii, Jan 31, 2007.

  1. abbamilkii

    abbamilkii Guest

    I was testing the GZipStream class to compress a power point document.

    It is actually inflating the file rather than compressing it.

    A file size of 653824 became 919317 after compression. Can anybody explain
    this to me? This happened to me before too. Did the meaning of the word
    change or something is three that I don't know.

    The code I tested is on MSDN and you will find it below too

    using System;
    using System.IO;
    using System.IO.Compression;

    public class GZipTest
    {
    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
    {
    // Use this method is used to read all bytes from a stream.
    int offset = 0;
    int totalCount = 0;
    while (true)
    {
    int bytesRead = stream.Read(buffer, offset, 100);
    if ( bytesRead == 0)
    {
    break;
    }
    offset += bytesRead;
    totalCount += bytesRead;
    }
    return totalCount;
    }

    public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
    {
    // Use this method to compare data from two different buffers.
    if (len1 != len2)
    {
    Console.WriteLine("Number of bytes in two buffer are different {0}:{1}",
    len1, len2);
    return false;
    }

    for ( int i= 0; i< len1; i++)
    {
    if ( buf1 != buf2)
    {
    Console.WriteLine("byte {0} is different {1}|{2}", i, buf1, buf2);
    return false;
    }
    }
    Console.WriteLine("All bytes compare.");
    return true;
    }

    public static void GZipCompressDecompress(string filename)
    {
    Console.WriteLine("Test compression and decompression on file {0}",
    filename);
    FileStream infile;
    try
    {
    // Open the file as a FileStream object.
    infile = new FileStream(filename, FileMode.Open, FileAccess.Read,
    FileShare.Read);
    byte[] buffer = new byte[infile.Length];
    // Read the file to ensure it is readable.
    int count = infile.Read(buffer, 0, buffer.Length);
    if ( count != buffer.Length)
    {
    infile.Close();
    Console.WriteLine("Test Failed: Unable to read data from file");
    return;
    }
    infile.Close();
    MemoryStream ms = new MemoryStream();
    // Use the newly created memory stream for the compressed data.
    GZipStream compressedzipStream = new GZipStream(ms ,
    CompressionMode.Compress, true);
    Console.WriteLine("Compression");
    compressedzipStream.Write(buffer, 0, buffer.Length);
    // Close the stream.
    compressedzipStream.Close();
    Console.WriteLine("Original size: {0}, Compressed size: {1}",
    buffer.Length, ms.Length);

    // Reset the memory stream position to begin decompression.
    ms.Position = 0;
    GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
    Console.WriteLine("Decompression");
    byte[] decompressedBuffer = new byte[buffer.Length + 100];
    // Use the ReadAllBytesFromStream to read the stream.
    int totalCount = GZipTest.ReadAllBytesFromStream(zipStream,
    decompressedBuffer);
    Console.WriteLine("Decompressed {0} bytes", totalCount);

    if( !GZipTest.CompareData(buffer, buffer.Length, decompressedBuffer,
    totalCount) )
    {
    Console.WriteLine("Error. The two buffers did not compare.");
    }
    zipStream.Close();
    } // end try
    catch (InvalidDataException)
    {
    Console.WriteLine("Error: The file being read contains invalid data.");
    }
    catch (FileNotFoundException)
    {
    Console.WriteLine("Error:The file specified was not found.");
    }
    catch (ArgumentException)
    {
    Console.WriteLine("Error: path is a zero-length string, contains only
    white space, or contains one or more invalid characters");
    }
    catch (PathTooLongException)
    {
    Console.WriteLine("Error: The specified path, file name, or both exceed
    the system-defined maximum length. For example, on Windows-based platforms,
    paths must be less than 248 characters, and file names must be less than 260
    characters.");
    }
    catch (DirectoryNotFoundException)
    {
    Console.WriteLine("Error: The specified path is invalid, such as being on
    an unmapped drive.");
    }
    catch (IOException)
    {
    Console.WriteLine("Error: An I/O error occurred while opening the file.");
    }
    catch (UnauthorizedAccessException)
    {
    Console.WriteLine("Error: path specified a file that is read-only, the
    path is a directory, or caller does not have the required permissions.");
    }
    catch (IndexOutOfRangeException)
    {
    Console.WriteLine("Error: You must provide parameters for MyGZIP.");
    }
    }
    public static void Main(string[] args)
    {
    string usageText = "Usage: MYGZIP <inputfilename>";
    //If no file name is specified, write usage text.
    if (args.Length == 0)
    {
    Console.WriteLine(usageText);
    }
    else
    {
    if (File.Exists(args[0]))
    GZipCompressDecompress(args[0]);
    }
    }
    }
    abbamilkii, Jan 31, 2007
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. love0503hk
    Replies:
    0
    Views:
    565
    love0503hk
    Jan 25, 2004
  2. jonnah
    Replies:
    5
    Views:
    911
    Walter Roberson
    May 19, 2004
  3. Harkin
    Replies:
    0
    Views:
    494
    Harkin
    Jul 19, 2005
  4. Meat Plow

    Re: Class 5 vs. Class 6 Toilets

    Meat Plow, Aug 4, 2010, in forum: Computer Support
    Replies:
    0
    Views:
    645
    Meat Plow
    Aug 4, 2010
  5. tightfisted easy-pick-up

    Re: Class 5 vs. Class 6 Toilets

    tightfisted easy-pick-up, Aug 4, 2010, in forum: Computer Support
    Replies:
    4
    Views:
    1,788
    §ñühw¤£f
    Aug 5, 2010
Loading...

Share This Page