473,320 Members | 1,804 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

DeflateStream

2
Hi,

Can anybody tell me how to use the System.IO.Compression

Deflatestream Class.

I have a byte[] which is a compressed set of bytes that form a block.

I want to inflate the byte[] and return the new inflated byte[].

public static byte[] Deflate(byte[] c_block)
{
MemoryStream ms = new MemoryStream(c_block);
DeflateStream zlib = new DeflateStream (ms,CompressionMode.Decompress);
zlib.Read(d_block,0,??);
// Close the stream.
zlib.Close();
ms.Close();
return d_block;
}

Is this the right approach ?? If so, how can I tell the size of the inflated array d_block for the zlib.Read method. Can somebody provide some guidance.

Thanks

Phill
Jan 16 '07 #1
2 3550
AricC
1,892 Expert 1GB
From MSDN

Expand|Select|Wrap|Line Numbers
  1. Imports System
  2. Imports System.IO
  3. Imports System.IO.Compression
  4.  
  5.  
  6.  
  7. Public Class DeflateTest
  8.     Shared msg As String
  9.    Public Shared Function ReadAllBytesFromStream(stream As Stream, buffer() As Byte) As Integer
  10.       ' Use this method is used to read all bytes from a stream.
  11.       Dim offset As Integer = 0
  12.       Dim totalCount As Integer = 0
  13.       While True
  14.          Dim bytesRead As Integer = stream.Read(buffer, offset, 100)
  15.          If bytesRead = 0 Then
  16.             Exit While
  17.          End If
  18.          offset += bytesRead
  19.          totalCount += bytesRead
  20.       End While
  21.       Return totalCount
  22.    End Function 'ReadAllBytesFromStream
  23.  
  24.  
  25.    Public Shared Function CompareData(buf1() As Byte, len1 As Integer, buf2() As Byte, len2 As Integer) As Boolean
  26.       ' Use this method to compare data from two different buffers.
  27.         If len1 <> len2 Then
  28.             msg = "Number of bytes in two buffer are different" & len1 & ":" & len2
  29.             MsgBox(msg)
  30.             Return False
  31.         End If
  32.  
  33.       Dim i As Integer
  34.       For i = 0 To len1 - 1
  35.          If buf1(i) <> buf2(i) Then
  36.                 msg = "byte " & i & " is different " & buf1(i) & "|" & buf2(i)
  37.                 MsgBox(msg)
  38.                 Return False
  39.          End If
  40.         Next i
  41.         msg = "All bytes compare."
  42.         MsgBox(msg)
  43.         Return True
  44.    End Function 'CompareData
  45.  
  46.  
  47.    Public Shared Sub DeflateCompressDecompress(filename As String)
  48.         msg = "Test compression and decompression on file " & filename
  49.         MsgBox(msg)
  50.  
  51.         Dim infile As FileStream
  52.       Try
  53.          ' Open the file as a FileStream object.
  54.          infile = New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)
  55.             Dim buffer(infile.Length - 1) As Byte
  56.          ' Read the file to ensure it is readable.
  57.             Dim count As Integer = infile.Read(buffer, 0, buffer.Length)
  58.          If count <> buffer.Length Then
  59.                 infile.Close()
  60.                 msg = "Test Failed: Unable to read data from file"
  61.                 MsgBox(msg)
  62.                 Return
  63.          End If
  64.          infile.Close()
  65.          Dim ms As New MemoryStream()
  66.          ' Use the newly created memory stream for the compressed data.
  67.          Dim compressedzipStream As New DeflateStream(ms, CompressionMode.Compress, True)
  68.          compressedzipStream.Write(buffer, 0, buffer.Length)
  69.          ' Close the stream.
  70.             compressedzipStream.Close()
  71.  
  72.             msg = "Original size: " & buffer.Length & ", Compressed size: " & ms.Length
  73.             MsgBox(msg)
  74.  
  75.          ' Reset the memory stream position to begin decompression.
  76.          ms.Position = 0
  77.          Dim zipStream As New DeflateStream(ms, CompressionMode.Decompress)
  78.          Dim decompressedBuffer(buffer.Length + 100) As Byte
  79.          ' Use the ReadAllBytesFromStream to read the stream.
  80.          Dim totalCount As Integer = DeflateTest.ReadAllBytesFromStream(zipStream, decompressedBuffer)
  81.             msg = "Decompressed " & totalCount & " bytes"
  82.             MsgBox(msg)
  83.  
  84.          If Not DeflateTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) Then
  85.                 msg = "Error. The two buffers did not compare."
  86.                 MsgBox(msg)
  87.  
  88.          End If
  89.          zipStream.Close()
  90.         Catch e As Exception
  91.             msg = "Error: The file being read contains invalid data."
  92.             MsgBox(msg)
  93.         End Try
  94.  
  95.    End Sub 'DeflateCompressDecompress
  96.  
  97.     Public Shared Sub Main(ByVal args() As String)
  98.         Dim usageText As String = "Usage: DeflateTest <inputfilename>"
  99.         'If no file name is specified, write usage text.
  100.         If args.Length = 0 Then
  101.             Console.WriteLine(usageText)
  102.         Else
  103.             If File.Exists(args(0)) Then
  104.                 DeflateCompressDecompress(args(0))
  105.             End If
  106.         End If
  107.     End Sub 'Main
  108. End Class 'DeflateTest
  109.  
Jan 16 '07 #2
Flpit
2
Yep, tried that, but it relies on having the original file, compressing it, then uncompressing it, so it has a reference to the uncompressed file size.

Can you explain how to implement this in stimple terms ??
Jan 16 '07 #3

Sign in to post your reply or Sign up for a free account.

Similar topics

0
by: Neo | last post by:
I was changing over my code from the #Ziplib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx) compression streams to the new DefalteStream in the 2.0 framework. I noticed all my...
10
by: Asaf | last post by:
Hi, I am trying to Compress & Decompress a DataSet. When running this code I am receiving the error: System.Xml.XmlException was unhandled Message="Root element is missing."...
2
by: Brent Rogers | last post by:
I am having trouble with the DeflateStream.Read() method. For some reason it wants to return Zero. I have this set of classes: =================== using System; using...
1
by: bthetford | last post by:
I am trying to roll a simple compression scheme for network communication in an app I am developing. On the sender side, I compress each block of a set amount of bytes individually, then send it...
4
by: =?Utf-8?B?Sm9uIEphY29icw==?= | last post by:
The compression part of this code works fine for me, but the decompression part of this code does not. The output file from that is the same as the compressed file. What is wrong with my code?...
1
by: sedwick | last post by:
I'm using .NET 2.0.50727 in VS 2005 Pro, ENU Service Pack 1 (KB926601). I've been experimenting with the System.IO.Compression classes GZipStream and DeflateStream, and I found it interesting to...
1
by: Smithers | last post by:
IIRC, we can use only System.IO.Compression.InflateStream to uncompress files compressed with System.IO Compression.DeflateStream. If that is in fact true, what are some alternatives you might...
4
by: Grok | last post by:
Trying to zip/unzip files from VB.NET 2005 with 2.0 .NET Framework ... but the file created "SampleFile.zip" is not a readable zip file. (Using GZipStream works correctly to produce a readable .gz...
2
by: Author | last post by:
I am exploring the DeflateStream class as a practice. I thought it is fun to compress a text file and write it to a disk file. So I created the following method. If you don't bother reading the...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.