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.
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.
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.
There are four compression interfaces available in this module.
- Compress::Raw::Lzma::EasyEncoder =item
Compress::Raw::Lzma::AloneEncoder =item Compress::Raw::Lzma::StreamEncoder
=item Compress::Raw::Lzma::RawEncoder
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.
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:
-
Preset => $preset
- Used to choose the compression preset.
Valid values are 0-9 and "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".
- Extreme => 0|1
- Makes the compression a lot slower, but a small compression
gain.
Defaults to 0.
-
Check => $check
- 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".
Defaults to "LZMA_CHECK_CRC32".
- AppendOutput => 0|1
- 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).
-
BufSize => $number
- 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".
Defaults to 16k.
Creates a legacy
lzma compression object. This format is also know as
lzma_alone.
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.
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:
-
Filter => $filter
- 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".
If this option is not present an "Lzma::Filter::Lzma1" object with
default values will be used.
- AppendOutput => 0|1
- 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).
-
BufSize => $number
- 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".
Defaults to 16k.
Creates a
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.
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:
-
Filter => $filter =item Filter
=> [$filter1, $filter2,...]
- 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.
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.
If this option is not present an "Lzma::Filter::Lzma2" object with
default values will be used.
-
Check => $check
- 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".
Defaults to "LZMA_CHECK_CRC32".
- AppendOutput => 0|1
- 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).
-
BufSize => $number
- 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".
Defaults to 16k.
Low level access to lzma.
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.
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:
-
Filter => $filter =item Filter
=> [$filter1, $filter2,...]
- 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.
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.
If this option is not present an "Lzma::Filter::Lzma2" object with
default values will be used.
- AppendOutput => 0|1
- 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).
-
BufSize => $number
- 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".
Defaults to 16k.
- ForZip => 1/0
- This boolean option is used to enable prefixing the
compressed data stream with an encoded copy of the filter properties.
Defaults to 0.
Reads the contents of $input, compresses it and writes the compressed data to
$output.
Returns "LZMA_OK" on success and an "lzma" error code on
failure.
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.
Flushes any pending compressed data to $output. By default it terminates the
compressed data stream.
Returns "LZMA_OK" on success and an "lzma" error code on
failure.
TODO
There are four uncompression interfaces available in this module.
- Compress::Raw::Lzma::AutoDecoder =item
Compress::Raw::Lzma::AloneDecoder =item Compress::Raw::Lzma::StreamDecoder
=item Compress::Raw::Lzma::RawDecoder
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.
Below is a list of the valid options:
- -MemLimit
- The number of bytes to use when uncompressing.
Default is unlimited.
- -Bufsize
- 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".
Default is 16k.
- -AppendOutput
- 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.
- -ConsumeInput
- 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.
- -LimitOutput
- 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.
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.
If "LimitOutput" is enabled, the "ConsumeInput" option
will also be enabled.
This option defaults to false.
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.
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.
Below is a list of the valid options:
- -MemLimit
- The number of bytes to use when uncompressing.
Default is unlimited.
- -Bufsize
- 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".
Default is 16k.
- -AppendOutput
- 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.
- -ConsumeInput
- 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.
- -LimitOutput
- 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.
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.
If "LimitOutput" is enabled, the "ConsumeInput" option
will also be enabled.
This option defaults to false.
See "The LimitOutput option" for a discussion on why
"LimitOutput" is needed and how to use it.
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.
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.
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).
All Lzma Filters are sub-classed from the "Lzma::Filter" base-class.
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.
- DictSize => $value
- 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".
Defaults to "LZMA_DICT_SIZE_DEFAULT".
- PresetDict => $dict
- 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.
If $dict is larger than "DictSize", only the last
"DictSize" bytes are processed.
- Lc => $value
- 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".
Note the sum of the "Lc" and "Lp" options cannot exceed
4.
Defaults to "LZMA_LC_DEFAULT".
- Lp => $value
- 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".
- Pb => $value
- 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".
Defaults to "LZMA_PB_DEFAULT".
- Mode => $value
- The Compression Mode. Valid values are
"LZMA_MODE_FAST" and "LZMA_MODE_NORMAL".
Defaults to "LZMA_MODE_NORMAL".
- Nice => $value
- Nice length of a match
Defaults to 64.
- Mf => $value
- 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".
Defaults to "LZMA_MF_BT4".
- Depth => $value
- Maximum search depth in the match finder.
Defaults to 0.
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::X86
- Filter for x86 binaries.
- Lzma::Filter::PowerPC
- Filter for Big endian PowerPC binaries.
- Lzma::Filter::IA64
- Filter for IA64 (Itanium) binaries.
- Lzma::Filter::ARM
- Filter for ARM binaries.
- Lzma::Filter::ARMThumb
- Filter for ARMThumb binaries.
- Lzma::Filter::Sparc
- Filter for Sparc binaries.
Usage is
Lzma::Filter::Delta [OPTS]
- Type => $type
- Defines the type of Delta calculation. The only available
type (and therefore the default) is "LZMA_DELTA_TYPE_BYTE",
- Distance => $value
- Defines the Delta Distance. $value must be a number between
"LZMA_DELTA_DIST_MIN" and "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
TODO - more here
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, "
[email protected]".
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.