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
2 3550
From MSDN -
Imports System
-
Imports System.IO
-
Imports System.IO.Compression
-
-
-
-
Public Class DeflateTest
-
Shared msg As String
-
Public Shared Function ReadAllBytesFromStream(stream As Stream, buffer() As Byte) As Integer
-
' Use this method is used to read all bytes from a stream.
-
Dim offset As Integer = 0
-
Dim totalCount As Integer = 0
-
While True
-
Dim bytesRead As Integer = stream.Read(buffer, offset, 100)
-
If bytesRead = 0 Then
-
Exit While
-
End If
-
offset += bytesRead
-
totalCount += bytesRead
-
End While
-
Return totalCount
-
End Function 'ReadAllBytesFromStream
-
-
-
Public Shared Function CompareData(buf1() As Byte, len1 As Integer, buf2() As Byte, len2 As Integer) As Boolean
-
' Use this method to compare data from two different buffers.
-
If len1 <> len2 Then
-
msg = "Number of bytes in two buffer are different" & len1 & ":" & len2
-
MsgBox(msg)
-
Return False
-
End If
-
-
Dim i As Integer
-
For i = 0 To len1 - 1
-
If buf1(i) <> buf2(i) Then
-
msg = "byte " & i & " is different " & buf1(i) & "|" & buf2(i)
-
MsgBox(msg)
-
Return False
-
End If
-
Next i
-
msg = "All bytes compare."
-
MsgBox(msg)
-
Return True
-
End Function 'CompareData
-
-
-
Public Shared Sub DeflateCompressDecompress(filename As String)
-
msg = "Test compression and decompression on file " & filename
-
MsgBox(msg)
-
-
Dim infile As FileStream
-
Try
-
' Open the file as a FileStream object.
-
infile = New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)
-
Dim buffer(infile.Length - 1) As Byte
-
' Read the file to ensure it is readable.
-
Dim count As Integer = infile.Read(buffer, 0, buffer.Length)
-
If count <> buffer.Length Then
-
infile.Close()
-
msg = "Test Failed: Unable to read data from file"
-
MsgBox(msg)
-
Return
-
End If
-
infile.Close()
-
Dim ms As New MemoryStream()
-
' Use the newly created memory stream for the compressed data.
-
Dim compressedzipStream As New DeflateStream(ms, CompressionMode.Compress, True)
-
compressedzipStream.Write(buffer, 0, buffer.Length)
-
' Close the stream.
-
compressedzipStream.Close()
-
-
msg = "Original size: " & buffer.Length & ", Compressed size: " & ms.Length
-
MsgBox(msg)
-
-
' Reset the memory stream position to begin decompression.
-
ms.Position = 0
-
Dim zipStream As New DeflateStream(ms, CompressionMode.Decompress)
-
Dim decompressedBuffer(buffer.Length + 100) As Byte
-
' Use the ReadAllBytesFromStream to read the stream.
-
Dim totalCount As Integer = DeflateTest.ReadAllBytesFromStream(zipStream, decompressedBuffer)
-
msg = "Decompressed " & totalCount & " bytes"
-
MsgBox(msg)
-
-
If Not DeflateTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) Then
-
msg = "Error. The two buffers did not compare."
-
MsgBox(msg)
-
-
End If
-
zipStream.Close()
-
Catch e As Exception
-
msg = "Error: The file being read contains invalid data."
-
MsgBox(msg)
-
End Try
-
-
End Sub 'DeflateCompressDecompress
-
-
Public Shared Sub Main(ByVal args() As String)
-
Dim usageText As String = "Usage: DeflateTest <inputfilename>"
-
'If no file name is specified, write usage text.
-
If args.Length = 0 Then
-
Console.WriteLine(usageText)
-
Else
-
If File.Exists(args(0)) Then
-
DeflateCompressDecompress(args(0))
-
End If
-
End If
-
End Sub 'Main
-
End Class 'DeflateTest
-
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 ??
Sign in to post your reply or Sign up for a free account.
Similar topics
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...
|
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."...
|
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...
|
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...
|
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?...
|
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...
|
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...
|
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...
|
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...
|
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...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
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...
|
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...
|
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...
|
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...
|
by: Defcon1945 |
last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
|
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
|
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...
| |