(VB.NET) Streaming Compression

Chilkat .NET Downloads

Dim fac As NewChilkat.FileAccessDim compress As NewChilkat.CompressionDim success As Boolean = compress.UnlockComponent("Anything for 30-day trial.")
If (success <> True) Then
Console.WriteLine(compress.LastErrorText)
Exit SubEnd If
compress.Algorithm = "deflate"Dim streamC As NewChilkat.Stream' This example sets the source and sink of the stream to files.' A stream can have use other streams as a source or sink,' or the application can itself be the source/sink by directly' reading or writing a stream. (See below for an example of this..)
streamC.SourceFile = "qa_data/hamlet.xml"
streamC.SinkFile = "qa_output/hamlet_compressed.dat"' Compress from source to sink.
success = compress.CompressStream(streamC)
If (success <> True) Then
Console.WriteLine(compress.LastErrorText)
Exit SubEnd If
Console.WriteLine("File-to-file deflate compression successful.")
Console.WriteLine("Original size = " & fac.FileSize(streamC.SourceFile))
Console.WriteLine("Compressed size = " & fac.FileSize(streamC.SinkFile))
' Now do file-to-file decompressionDim streamD As NewChilkat.Stream
streamD.SourceFile = "qa_output/hamlet_compressed.dat"
streamD.SinkFile = "qa_output/hamlet_restored.xml"' Decompress from source to sink.
success = compress.DecompressStream(streamD)
If (success <> True) Then
Console.WriteLine(compress.LastErrorText)
Exit SubEnd If
Console.WriteLine("File-to-file deflate decompression successful.")
' Let's double-check to see that the files are equal in size and content:Dim bFilesEqual As Boolean = fac.FileContentsEqual(streamC.SourceFile,streamD.SinkFile)
If (bFilesEqual <> True) Then
Console.WriteLine("The output file is not equal to the input file!")
Else
Console.WriteLine("The file was successfully compressed and decompressed.")
End If' ---------------------------------------------------------------------' Now let's decompress again, but this time w/ the application reading' the decompressed data directly from a stream.Dim streamA As NewChilkat.Stream
streamA.SourceFile = "qa_output/hamlet_compressed.dat"' Start decompressing in a background thread.Dim task AsChilkat.Task = compress.DecompressStreamAsync(streamA)
success = task.Run()
' Read decompressed data from streamA:Dim decompressedText As StringWhile (streamA.EndOfStream <> True)
If (streamA.DataAvailable = True) Then
decompressedText = streamA.ReadString()
Console.WriteLine(decompressedText)
End IfEnd While' Let's make sure the background task finished and that the decompress was successful.' It should already be the case that the task is finished.While (task.Finished <> True)
task.SleepMs(20)
End While' The decompressor may have finished, but it is possible that data' remains to be flushed.If (streamA.DataAvailable = True) Then
decompressedText = streamA.ReadString()
Console.WriteLine(decompressedText)
End If' Did streamA succeed in reading the entire file?If (task.TaskSuccess <> True) Then
Console.WriteLine("async decompress failed:")
Console.WriteLine(task.ResultErrorText)
success = FalseEnd If
Console.WriteLine("The async decompress was successful.")