-
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
BZip2 is a commonly used general purpose data compression algorithm.
RB-BZip2 is a BZip2 binding for Realbasic and Xojo projects.
- Read and write compressed file or memory streams using a simple BinaryStream work-alike.
This project provides several different ways to use BZip2.
The easiest way to use this project are the utility methods in the BZip2 module:
These methods are overloaded with several useful variations on input and output parameters. All variations follow either this signature:
function(source, destination, options[...]) As Boolean
or this signature:
function(source, options[...]) As MemoryBlock
where source
is a MemoryBlock
, FolderItem
, or an object which implements the Readable
interface; and destination
(when provided) is a FolderItem
or an object which implements the Writeable
interface. Methods which do not have a Destination
parameter return output as a MemoryBlock
instead. Refer to the examples below for demonstrations of some of these functions.
The second way to use BZip2 is with the BZ2Stream
class. The BZ2Stream
is a BinaryStream
work-alike, and implements both the Readable
and Writeable
interfaces. Anything written to a BZ2Stream
is compressed and emitted to the output stream (another Writeable
); reading from a BZ2Stream
decompresses data from the input stream (another Readable
).
Instances of BZ2Stream
can be created from MemoryBlocks, FolderItems, and objects that implement the Readable
and/or Writeable
interfaces. For example, creating an in-memory compression stream from a zero-length MemoryBlock and writing a string to it:
Dim output As New MemoryBlock(0)
Dim z As New BZip2.BZ2Stream(output) ' zero-length creates a compressor
z.Write("Hello, world!")
z.Close
The string will be processed through the compressor and written to the output
MemoryBlock. To create a decompressor pass a MemoryBlock whose size is > 0 (continuing from above):
z = New BZip2.BZ2Stream(output) ' output contains the compressed string
MsgBox(z.Read(64)) ' read the decompressed string
The third and final way to use this project is through the Compressor and Decompressor classes. These classes provide a low-level wrapper to the BZip2 API. All compression and decompression done using the BZ2Stream
class or the utility methods is ultimately carried out by an instance of Compressor
and Decompressor
, respectively.
This example compresses and decompresses a MemoryBlock:
Dim data As MemoryBlock = "Potentially very large MemoryBlock goes here!"
Dim comp As MemoryBlock = BZip2.Compress(data)
Dim dcmp As MemoryBlock = BZip2.Decompress(comp)
This example bzips a file:
Dim src As FolderItem = GetOpenFolderItem("") ' a file to be bzipped
Dim dst As FolderItem = src.Parent.Child(src.Name + ".bz2")
If BZip2.Compress(src, dst) Then
MsgBox("Compression succeeded!")
Else
MsgBox("Compression failed!")
End If
This example opens an existing bzip2 file and decompresses it into a MemoryBlock
:
Dim f As FolderItem = GetOpenFolderItem("") ' the bzip file to open
Dim data As MemoryBlock = BZip2.Decompress(f)
If data <> Nil Then
MsgBox("Decompression succeeded!")
Else
MsgBox("Decompression failed!")
End If
- Download the RB-bzip2 project either in ZIP archive format or by cloning the repository with your Git client.
- Open the RB-bzip2 project in REALstudio or Xojo. Open your project in a separate window.
- Copy the
BZip2
module into your project and save.
bzip2 is installed by default on many Unix-like operating systems, however it may need to be installed separately.
Windows does not have it installed by default, you will need to ship the DLL with your application. You can use pre-built DLL available here (Win32x86), or you can build them yourself from source.
RB-bzip2 will raise a PlatformNotSupportedException when used if all required DLLs/SOs/DyLibs are not available at runtime.
Wiki home | Project page | Bugs | Become a sponsor
Text and code examples are Copyright ©2018-24 Andrew Lambert, offered under the CC BY-SA 3.0 License.