Compress::Raw::Lzma - Low-Level Interface to lzma compression library
use Compress::Raw::Lzma ; # Encoders my ($lz, $status) = new Compress::Raw::Lzma::EasyEncoder [OPTS] or die "Cannot create lzma object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::AloneEncoder [OPTS] or die "Cannot create lzma object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::StreamEncoder [OPTS] or die "Cannot create lzma object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::RawEncoder [OPTS] or die "Cannot create lzma object: $status\n"; $status = $lz->code($input, $output); $status = $lz->flush($output); # Decoders my ($lz, $status) = new Compress::Raw::Lzma::AloneDecoder [OPTS] or die "Cannot create bunzip2 object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::AutoDecoder [OPTS] or die "Cannot create bunzip2 object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::StreamDecoder [OPTS] or die "Cannot create bunzip2 object: $status\n"; my ($lz, $status) = new Compress::Raw::Lzma::RawDecoder [OPTS] or die "Cannot create bunzip2 object: $status\n"; $status = $lz->code($input, $output); my $version = Compress::Raw::Lzma::lzma_version_number(); my $version = Compress::Raw::Lzma::lzma_version_string();
Compress::Raw::Lzma provides an interface to the in-memory compression/uncompression functions from the lzma compression library.
Compress::Raw::Lzma
Although the primary purpose for the existence of Compress::Raw::Lzma is for use by the IO::Compress::Lzma, IO::Uncompress::UnLzma, IO::Compress::Xz and IO::Uncompress::UnXz modules, it can be used on its own for simple compression/uncompression tasks.
IO::Compress::Lzma
IO::Uncompress::UnLzma
IO::Compress::Xz
IO::Uncompress::UnXz
There are two functions, called code and flush, used in all the compression and uncompression interfaces defined in this module. By default both of these functions overwrites any data stored in its output buffer parameter. If you want to compress/uncompress to a single buffer, and have code and flush append to that buffer, enable the AppendOutput option when you create the compression/decompression object.
code
flush
AppendOutput
There are four compression interfaces available in this module.
Creates a new xz compression object.
If successful, it will return the initialised compression object, $z and a $status of LZMA_OK in a list context. In scalar context it returns the deflation object, $z, only.
$z
$status
LZMA_OK
If not successful, the returned compression object, $z, will be undef and $status will hold the an lzma error code.
Below is a list of the valid options:
Used to choose the compression preset.
Valid values are 0-9 and LZMA_PRESET_DEFAULT.
LZMA_PRESET_DEFAULT
0 is the fastest compression with the lowest memory usage and the lowest compression.
9 is the slowest compression with the highest memory usage but with the best compression.
Defaults to LZMA_PRESET_DEFAULT.
Makes the compression a lot slower, but a small compression gain.
Defaults to 0.
Used to specify the integrity check used in the xz data stream. Valid values are LZMA_CHECK_NONE, LZMA_CHECK_CRC32, LZMA_CHECK_CRC64, LZMA_CHECK_SHA256.
LZMA_CHECK_NONE
LZMA_CHECK_CRC32
LZMA_CHECK_CRC64
LZMA_CHECK_SHA256
Defaults to LZMA_CHECK_CRC32.
Controls whether the compressed data is appended to the output buffer in the code and flush methods.
Defaults to 0. (Note in versions of this module prior to 2.072 the default value was incorrectly documented as 1).
Sets the initial size for the output buffer used by the $d->code method. If the buffer has to be reallocated to increase the size, it will grow in increments of Bufsize.
$d->code
Bufsize
Defaults to 16k.
Creates a legacy lzma compression object. This format is also know as lzma_alone.
The $filter option must be an object of type Lzma::Filter::Lzma1. See "Lzma::Filter::Lzma" in Compress::Raw::Lzma for a definition of Lzma::Filter::Lzma1.
$filter
Lzma::Filter::Lzma1
If this option is not present an Lzma::Filter::Lzma1 object with default values will be used.
Creates a xz compression object.
This option is used to change the bahaviour of the StreamEncoder by applying between one and LZMA_FILTERS_MAX filters to the data stream during compression. See "Filters" for more details on the available filters.
LZMA_FILTERS_MAX
If this option is present it must either contain a single Lzma::Filter::Lzma filter object or an array reference containing between one and LZMA_FILTERS_MAX filter objects.
Lzma::Filter::Lzma
If this option is not present an Lzma::Filter::Lzma2 object with default values will be used.
Lzma::Filter::Lzma2
Low level access to lzma.
This option is used to change the bahaviour of the RawEncoder by applying between one and LZMA_FILTERS_MAX filters to the data stream during compression. See "Filters" for more details on the available filters.
This boolean option is used to enable prefixing the compressed data stream with an encoded copy of the filter properties.
Reads the contents of $input, compresses it and writes the compressed data to $output.
$input
$output
Returns LZMA_OK on success and an lzma error code on failure.
lzma
If appendOutput is enabled in the constructor for the lzma object, the compressed data will be appended to $output. If not enabled, $output will be truncated before the compressed data is written to it.
appendOutput
Flushes any pending compressed data to $output. By default it terminates the compressed data stream.
TODO
There are four uncompression interfaces available in this module.
Create an object that can uncompress any of the compressed data streams that can be created by this module.
If successful, it will return the initialised uncompression object, $z and a $status of LZMA_OK in a list context. In scalar context it returns the deflation object, $z, only.
If not successful, the returned uncompression object, $z, will be undef and $status will hold the an lzma error code.
The number of bytes to use when uncompressing.
Default is unlimited.
Sets the initial size for the output buffer used by the $i->code method. If the output buffer in this method has to be reallocated to increase the size, it will grow in increments of Bufsize.
$i->code
Default is 16k.
This option controls how data is written to the output buffer by the $i->code method.
If the option is set to false, the output buffer in the $i->code method will be truncated before uncompressed data is written to it.
If the option is set to true, uncompressed data will be appended to the output buffer by the $i->code method.
This option defaults to false.
If set to true, this option will remove compressed data from the input buffer of the $i->code method as the uncompression progresses.
This option can be useful when you are processing compressed data that is embedded in another file/buffer. In this case the data that immediately follows the compressed stream will be left in the input buffer.
This option defaults to true.
The LimitOutput option changes the behavior of the $i->code method so that the amount of memory used by the output buffer can be limited.
LimitOutput
When LimitOutput is used the size of the output buffer used will either be the value of the Bufsize option or the amount of memory already allocated to $output, whichever is larger. Predicting the output size available is tricky, so don't rely on getting an exact output buffer size.
When LimitOutout is not specified $i->code will use as much memory as it takes to write all the uncompressed data it creates by uncompressing the input buffer.
LimitOutout
If LimitOutput is enabled, the ConsumeInput option will also be enabled.
ConsumeInput
See "The LimitOutput option" for a discussion on why LimitOutput is needed and how to use it.
Create an object that can uncompress an lzma_alone data stream.
Uncompresses $input and writes the uncompressed data to $output.
Returns LZMA_OK if the uncompression was successful, but the end of the compressed data stream has not been reached. Returns LZMA_STREAM_END on successful uncompression and the end of the compression stream has been reached.
LZMA_STREAM_END
If consumeInput is enabled in the constructor for the lzma object, $input will have all compressed data removed from it after uncompression. On LZMA_OK return this will mean that $input will be an empty string; when LZMA_STREAM_END $input will either be an empty string or will contain whatever data immediately followed the compressed data stream.
consumeInput
If appendOutput is enabled in the constructor for the lzma object, the uncompressed data will be appended to $output. If not enabled, $output will be truncated before the uncompressed data is written to it.
TODO - more here
A number of the Lzma compression interfaces (namely Compress::Raw::Lzma::StreamEncoder & Compress::Raw::Lzma::AloneEncoder) and the raw lzma uncompression interface make use of filters. These filters are used to change the behaviour of compression (and raw uncompression).
Compress::Raw::Lzma::StreamEncoder
Compress::Raw::Lzma::AloneEncoder
All Lzma Filters are sub-classed from the Lzma::Filter base-class.
Lzma::Filter
The Lzma::Filter::Lzma class is used to... TODO - more here
There are two subclasses of Lzma::Filter::Lzma, namely Lzma::Filter::Lzma1 and Lzma::Filter::Lzma2.
The former is typically used with Compress::Raw::Lzma::AloneEncoder. The latter with Compress::Raw::Lzma::StreamEncoder.
When using Lzma filters an Lzma::Filter::Lzma must be included and it must be the last filter in the chain. There can only be one Lzma::Filter::Lzma filter in any filter chain.
The Lzma::Filter::Lzma construction takes the following options.
Dictionary size in bytes. This controls how many bytes of the recently processed uncompressed data is kept in memory. The size of the dictionary must be at least LZMA_DICT_SIZE_MIN.
LZMA_DICT_SIZE_MIN
Defaults to LZMA_DICT_SIZE_DEFAULT.
LZMA_DICT_SIZE_DEFAULT
Provide an initial dictionary. This value is used to initialize the LZ77 history window.
This feature only works correctly with raw encoding and decoding. You may not be able to decode other formats that have been encoded with a preset dictionary.
$dict should contain typical strings that occur in the files being compressed, with the most probably strings near the end fo the preset dictionary.
$dict
If $dict is larger than DictSize, only the last DictSize bytes are processed.
DictSize
Number of literal context bits.
How many of the highest bits of the previous uncompressed eight-bit byte (also known as `literal') are taken into account when predicting the bits of the next literal.
$value must be a number between LZMA_LCLP_MIN and LZMA_LCLP_MAX.
$value
LZMA_LCLP_MIN
LZMA_LCLP_MAX
Note the sum of the Lc and Lp options cannot exceed 4.
Lc
Lp
Defaults to LZMA_LC_DEFAULT.
LZMA_LC_DEFAULT
Number of literal position bits.
How many of the lowest bits of the current position (number of bytes from the beginning of the uncompressed data) in the uncompressed data is taken into account when predicting the bits of the next literal (a single eight-bit byte).
Defaults to LZMA_LP_DEFAULT.
LZMA_LP_DEFAULT
Number of position bits
How many of the lowest bits of the current position in the uncompressed data is taken into account when estimating probabilities of matches. A match is a sequence of bytes for which a matching sequence is found from the dictionary and thus can be stored as distance-length pair.
$value must be a number between LZMA_PB_MIN and LZMA_PB_MAX.
LZMA_PB_MIN
LZMA_PB_MAX
Defaults to LZMA_PB_DEFAULT.
LZMA_PB_DEFAULT
The Compression Mode. Valid values are LZMA_MODE_FAST and LZMA_MODE_NORMAL.
LZMA_MODE_FAST
LZMA_MODE_NORMAL
Defaults to LZMA_MODE_NORMAL.
Nice length of a match
Defaults to 64.
Defines which Match Finder to use. Valid values are LZMA_MF_HC3 LZMA_MF_HC4, LZMA_MF_BT2 LZMA_MF_BT3 and LZMA_MF_BT4.
LZMA_MF_HC3
LZMA_MF_HC4
LZMA_MF_BT2
LZMA_MF_BT3
LZMA_MF_BT4
Defaults to LZMA_MF_BT4.
Maximum search depth in the match finder.
The sub-classes of Lzma::Filter::BCJ are the Branch/Call/Jump conversion filters. These filters are used to rewrite executable binary code for a number of processor architectures. None of these classes take any options.
Lzma::Filter::BCJ
Filter for x86 binaries.
Filter for Big endian PowerPC binaries.
Filter for IA64 (Itanium) binaries.
Filter for ARM binaries.
Filter for ARMThumb binaries.
Filter for Sparc binaries.
Usage is
Lzma::Filter::Delta [OPTS]
Defines the type of Delta calculation. The only available type (and therefore the default) is LZMA_DELTA_TYPE_BYTE,
LZMA_DELTA_TYPE_BYTE
Defines the Delta Distance. $value must be a number between LZMA_DELTA_DIST_MIN and LZMA_DELTA_DIST_MAX.
LZMA_DELTA_DIST_MIN
LZMA_DELTA_DIST_MAX
Default is LZMA_DELTA_DIST_MIN.
Returns the version of the underlying lzma library this module is using at run-time as a number.
Returns the version of the underlying lzma library this module is using at run-time as a string.
Returns the version of the underlying lzma library this module was using at compile-time as a number.
Returns the version of the underlying lzma library this module was using at compile-time as a string.
The following lzma constants are exported by this module
General feedback/questions/bug reports should be sent to https://github.com/pmqs/Compress-Raw-Lzma/issues (preferred) or https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Lzma.
Compress::Zlib, IO::Compress::Gzip, IO::Uncompress::Gunzip, IO::Compress::Deflate, IO::Uncompress::Inflate, IO::Compress::RawDeflate, IO::Uncompress::RawInflate, IO::Compress::Bzip2, IO::Uncompress::Bunzip2, IO::Compress::Lzma, IO::Uncompress::UnLzma, IO::Compress::Xz, IO::Uncompress::UnXz, IO::Compress::Lzip, IO::Uncompress::UnLzip, IO::Compress::Lzop, IO::Uncompress::UnLzop, IO::Compress::Lzf, IO::Uncompress::UnLzf, IO::Compress::Zstd, IO::Uncompress::UnZstd, IO::Uncompress::AnyInflate, IO::Uncompress::AnyUncompress
IO::Compress::FAQ
File::GlobMapper, Archive::Zip, Archive::Tar, IO::Zlib
This module was written by Paul Marquess, pmqs@cpan.org.
pmqs@cpan.org
See the Changes file.
Copyright (c) 2005-2023 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Compress::Raw::Lzma, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Compress::Raw::Lzma
CPAN shell
perl -MCPAN -e shell install Compress::Raw::Lzma
For more information on module installation, please visit the detailed CPAN module installation guide.