Compress::Raw::Zlib - zlib 或 zlib-ng 压缩库的低级接口
use Compress::Raw::Zlib ;
($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) ;
$status = $d->deflate($input, $output) ;
$status = $d->flush($output [, $flush_type]) ;
$d->deflateReset() ;
$d->deflateParams(OPTS) ;
$d->deflateTune(OPTS) ;
$d->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$d->total_in() ;
$d->total_out() ;
$d->msg() ;
$d->get_Strategy();
$d->get_Level();
$d->get_BufSize();
($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ;
$status = $i->inflate($input, $output [, $eof]) ;
$status = $i->inflateSync($input) ;
$i->inflateReset() ;
$i->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$i->total_in() ;
$i->total_out() ;
$i->msg() ;
$d->get_BufSize();
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
my $version = Compress::Raw::Zlib::zlib_version();
my $flags = Compress::Raw::Zlib::zlibCompileFlags();
is_zlib_native();
is_zlibng_native();
is_zlibng_compat();
is_zlibng();
Compress::Raw::Zlib 模块为 zlib 或 zlib-ng 压缩库提供了一个 Perl 接口(有关从哪里获取 zlib 或 zlib-ng 的详细信息,请参见 "参见")。
在下文中,除非另有说明,所有对 zlib 的引用也适用于 zlib-ng。
本节定义了一个接口,允许使用 zlib 提供的 deflate 接口进行内存内压缩。
以下是可用接口的定义
初始化一个解压缩对象。
如果您熟悉 zlib 库,它将结合 zlib 函数 deflateInit
、deflateInit2
和 deflateSetDictionary
的功能。
如果成功,它将在列表上下文中返回已初始化的解压缩对象 $d
和 $status
为 Z_OK
。在标量上下文中,它只返回解压缩对象 $d
。
如果失败,返回的解压缩对象 $d
将为 undef,而 $status
将包含一个 zlib 错误代码。
该函数可以选择接受以 Name => value
对形式指定的多个命名选项。这允许在不指定所有参数的情况下定制单个选项。
为了向后兼容,也可以将参数作为包含 name=>value 对的哈希的引用传递。
以下是有效选项的列表
定义压缩级别。有效值为 0 到 9、Z_NO_COMPRESSION
、Z_BEST_SPEED
、Z_BEST_COMPRESSION
和 Z_DEFAULT_COMPRESSION
。
默认值为 Z_DEFAULT_COMPRESSION
。
定义压缩方法。目前唯一有效的(也是默认的)值为 Z_DEFLATED
。
要压缩 RFC 1950 数据流,将 WindowBits
设置为 8 到 15 之间的正数。
要压缩 RFC 1951 数据流,将 WindowBits
设置为 -MAX_WBITS
。
要压缩 RFC 1952 数据流(即 gzip),将 WindowBits
设置为 WANT_GZIP
。
有关 WindowBits
的含义和有效值的定义,请参阅 zlib 文档中的 deflateInit2。
默认为 MAX_WBITS
。
有关 MemLevel
的含义和有效值的定义,请参阅 zlib 文档中的 deflateInit2。
默认为 MAX_MEM_LEVEL。
定义用于调整压缩的策略。有效值为 Z_DEFAULT_STRATEGY
、Z_FILTERED
、Z_RLE
、Z_FIXED
和 Z_HUFFMAN_ONLY
。
默认值为 Z_DEFAULT_STRATEGY
。
当指定字典时,Compress::Raw::Zlib 将在调用 deflateInit
后立即自动调用 deflateSetDictionary
。可以通过调用方法 $d->dict_adler()
获取字典的 Adler32 值。
默认情况下不使用字典。
设置 $d->deflate
和 $d->flush
方法使用的输出缓冲区的初始大小。如果必须重新分配缓冲区以增加大小,它将以 Bufsize
的增量增长。
默认缓冲区大小为 4096。
此选项控制 $d->deflate
和 $d->flush
方法如何将数据写入输出缓冲区。
如果 AppendOutput
选项设置为 false,则 $d->deflate
和 $d->flush
方法中的输出缓冲区将在写入未压缩数据之前被截断。
如果该选项设置为 true,则未压缩数据将附加到 $d->deflate
和 $d->flush
方法中的输出缓冲区。
此选项默认设置为 false。
如果设置为 true,将计算未压缩数据的 crc32 校验和。使用 $d->crc32
方法检索此值。
此选项默认设置为 false。
如果设置为 true,将计算未压缩数据的 adler32 校验和。使用 $d->adler32
方法检索此值。
此选项默认设置为 false。
以下是如何使用 Compress::Raw::Zlib::Deflate
可选参数列表来覆盖默认缓冲区大小和压缩级别的示例。所有其他选项将采用其默认值。
my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300,
-Level => Z_BEST_SPEED ) ;
压缩 $input
的内容并将压缩后的数据写入 $output
。
$input
和 $output
参数可以是标量或标量引用。
完成后,$input
将被完全处理(假设没有错误)。如果压缩成功,它将压缩后的数据写入 $output
并返回状态值为 Z_OK
。
发生错误时,它将返回一个 zlib 错误代码。
如果在 $d
对象的构造函数中将 AppendOutput
选项设置为 true,则压缩后的数据将被追加到 $output
。如果为 false,则在写入任何压缩数据之前,$output
将被截断。
注意:此方法并不一定每次调用时都会将压缩后的数据写入 $output
。因此,不要假设如果从该方法返回时 $output
的内容为空,则发生了错误。只要该方法的返回值为 Z_OK
,则压缩就已成功。
通常用于完成压缩。任何待处理的输出将被写入 $output
。
如果成功,则返回 Z_OK
。
请注意,刷新会严重降低压缩率,因此它只应用于终止解压缩(使用 Z_FINISH
)或当您想要创建一个 完全刷新点(使用 Z_FULL_FLUSH
)时。
默认情况下,使用的 flush_type
为 Z_FINISH
。flush_type
的其他有效值为 Z_NO_FLUSH
、Z_PARTIAL_FLUSH
、Z_SYNC_FLUSH
和 Z_FULL_FLUSH
。强烈建议您只有在完全理解其含义的情况下才设置 flush_type
参数。有关详细信息,请参阅 zlib
文档。
如果在 $d
对象的构造函数中将 AppendOutput
选项设置为 true,则压缩后的数据将被追加到 $output
。如果为 false,则在写入任何压缩数据之前,$output
将被截断。
此方法将重置压缩对象 $d
。 当您压缩多个数据流并希望使用同一个对象压缩每个数据流时,可以使用此方法。 只有在先前数据流成功刷新后才能使用此方法,即调用 $d->flush(Z_FINISH)
返回 Z_OK
。
如果成功,则返回 Z_OK
。
更改压缩对象 $d
的设置。
下面列出了有效的选项。 未指定的选项将保持不变。
定义压缩级别。有效值为 0 到 9、Z_NO_COMPRESSION
、Z_BEST_SPEED
、Z_BEST_COMPRESSION
和 Z_DEFAULT_COMPRESSION
。
定义用于调整压缩的策略。 有效值为 Z_DEFAULT_STRATEGY
、Z_FILTERED
和 Z_HUFFMAN_ONLY
。
设置 $d->deflate
和 $d->flush
方法使用的输出缓冲区的初始大小。如果必须重新分配缓冲区以增加大小,它将以 Bufsize
的增量增长。
调整压缩对象 $d
的内部设置。 此选项仅在您运行 zlib 1.2.2.3 或更高版本时可用。
有关如何使用 deflateTune
的说明,请参阅 zlib.h 中的文档。
返回字典的 adler32 值。
返回迄今为止未压缩数据的 crc32 值。
如果此对象的构造函数中未启用 CRC32
选项,则此方法将始终返回 0。
返回迄今为止未压缩数据的 adler32 值。
返回 zlib 生成的最后一个错误消息。
返回输入到压缩的未压缩字节总数。
返回从 deflate 输出的压缩字节总数。
返回当前使用的压缩策略。有效值为 Z_DEFAULT_STRATEGY
、Z_FILTERED
和 Z_HUFFMAN_ONLY
。
返回正在使用的压缩级别。
返回用于执行压缩的缓冲区大小。
这是一个使用 deflate
的简单示例。它只是读取标准输入,对其进行压缩,并将其写入标准输出。
use strict ;
use warnings ;
use Compress::Raw::Zlib ;
binmode STDIN;
binmode STDOUT;
my $x = new Compress::Raw::Zlib::Deflate
or die "Cannot create a deflation stream\n" ;
my ($output, $status) ;
while (<>)
{
$status = $x->deflate($_, $output) ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
}
$status = $x->flush($output) ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
本节定义了一个接口,允许使用 zlib 提供的 inflate 接口进行内存内解压缩。
以下是接口的定义
初始化一个解压缩对象。
在列表上下文中,它返回解压缩对象 $i
和 zlib 状态代码 ($status
)。在标量上下文中,它只返回解压缩对象。
如果成功,$i
将保存解压缩对象,$status
将为 Z_OK
。
如果不成功,$i
将为 undef,$status
将保存 zlib 错误代码。
该函数可以选择接受以 -Name => value
对形式指定的多个命名选项。这允许在不指定参数列表中的所有选项的情况下定制单个选项。
为了向后兼容,也可以将参数作为对包含 name=>value
对的哈希的引用传递。
以下是有效选项的列表
要解压缩 RFC 1950 数据流,请将 WindowBits
设置为 8 到 15 之间的正数。
要解压缩 RFC 1951 数据流,请将 WindowBits
设置为 -MAX_WBITS
。
要解压缩 RFC 1952 数据流(即 gzip),请将 WindowBits
设置为 WANT_GZIP
。
要自动检测并解压缩 RFC 1950 或 RFC 1952 数据流(即 gzip),请将 WindowBits
设置为 WANT_GZIP_OR_ZLIB
。
有关 WindowBits
的含义和有效值的完整定义,请参阅 zlib 文档中的 inflateInit2。
默认为 MAX_WBITS
。
设置 $i->inflate
方法使用的输出缓冲区的初始大小。如果此方法中的输出缓冲区必须重新分配以增加大小,它将以 Bufsize
的增量增长。
默认值为 4096。
默认情况下不使用字典。
此选项控制 $i->inflate
方法如何将数据写入输出缓冲区。
如果选项设置为 false,则 $i->inflate
方法中的输出缓冲区将在写入解压缩数据之前被截断。
如果选项设置为 true,则 $i->inflate
方法将解压缩数据追加到输出缓冲区。
此选项默认设置为 false。
如果设置为 true,将计算解压缩数据的 crc32 校验和。使用 $i->crc32
方法检索此值。
此选项默认设置为 false。
如果设置为 true,将计算解压缩数据的 adler32 校验和。使用 $i->adler32
方法检索此值。
此选项默认设置为 false。
如果设置为 true,此选项将在 inflate 进度时从 $i->inflate
方法的输入缓冲区中删除压缩数据。
当您处理嵌入在另一个文件/缓冲区中的压缩数据时,此选项很有用。在这种情况下,紧随压缩流之后的数据将保留在输入缓冲区中。
此选项默认为 true。
LimitOutput
选项改变了 $i->inflate
方法的行为,以便限制输出缓冲区使用的内存量。
当使用 LimitOutput
时,使用的输出缓冲区的大小将是 Bufsize
选项的值或已分配给 $output
的内存量,以较大者为准。预测可用输出大小很棘手,因此不要依赖于获得确切的输出缓冲区大小。
当未指定 LimitOutout
时,$i->inflate
将使用尽可能多的内存来写入解压缩输入缓冲区创建的所有未压缩数据。
如果启用了 LimitOutput
,则 ConsumeInput
选项也将被启用。
此选项默认设置为 false。
有关 LimitOutput
的必要性和使用方法,请参阅 "The LimitOutput option"。
以下是如何使用可选参数覆盖默认缓冲区大小的示例。
my ($i, $status) = new Compress::Raw::Zlib::Inflate( -Bufsize => 300 ) ;
解压缩 $input
的完整内容,并将未压缩的数据写入 $output
。$input
和 $output
参数可以是标量或标量引用。
如果成功,则返回 Z_OK
;如果成功到达压缩数据的末尾,则返回 Z_STREAM_END
。
如果不成功,$status
将保存 zlib 错误代码。
如果在创建 Compress::Raw::Zlib::Inflate
对象时将 ConsumeInput
选项设置为 true,则 inflate
会修改 $input
参数。完成后,它将包含解压缩后输入缓冲区的剩余部分。实际上,这意味着当返回状态为 Z_OK
时,$input
参数将包含一个空字符串,而当返回状态为 Z_STREAM_END
时,$input
参数将包含解压缩数据流后输入缓冲区中存储的内容(如果有)。
此功能在处理封装压缩数据流的文件格式(例如 gzip、zip)并且解压缩流之后存在有用数据时很有用。
如果在该对象的构造函数中将 AppendOutput
选项设置为 true,则未压缩数据将追加到 $output
。如果为 false,则在将任何未压缩数据写入 $output
之前,将截断 $output
。
$eof
参数需要一些解释。
在 1.2.0 版之前,zlib 假设在进行解压缩时,压缩数据流之后至少有一个尾随字节。这通常不是问题,因为大多数 zlib 应用程序保证压缩数据流之后将有数据。例如,gzip(RFC 1950)和 zip 都定义了压缩数据流之后的尾随数据。
只有在满足以下所有条件时,才需要使用 $eof
参数
您正在使用比版本 1.2.0 更早的 zlib 版本,或者您希望您的应用程序代码能够与尽可能多的不同版本的 zlib 一起运行。
您已将 WindowBits
参数设置为 -MAX_WBITS
,在该对象的构造函数中,即您正在解压缩原始的压缩数据流(RFC 1951)。
压缩数据流之后没有立即出现数据。
如果所有这些都是这种情况,那么您需要在对 $i->inflate
的最后一次调用(并且仅在最后一次调用)中将 $eof
参数设置为 true。
如果您使用 zlib >= 1.2.0 构建了此模块,则会忽略 $eof
参数。您仍然可以设置它,但它不会在后台使用。
此方法可用于尝试从部分损坏的压缩数据流中恢复良好数据。它扫描 $input
,直到到达完全刷新点或缓冲区的末尾。
如果找到完全刷新点,则返回 Z_OK
,并且 $input
将删除所有直到刷新点的数据。然后可以将此数据传递给 $i->inflate
方法进行解压缩。
任何其他返回代码都表示未找到刷新点。如果有更多数据可用,则可以重复调用 inflateSync
,使用更多压缩数据,直到找到刷新点。
请注意,完全刷新点在默认情况下不会出现在压缩数据流中。它们必须在创建数据流时通过调用 Compress::Deflate::flush
并使用 Z_FULL_FLUSH
显式添加。
此方法将重置膨胀对象 $i
。当您解压缩多个数据流并希望使用同一个对象解压缩每个数据流时,可以使用此方法。
如果成功,则返回 Z_OK
。
返回字典的 adler32 值。
返回迄今为止未压缩数据的 crc32 值。
如果此对象的构造函数中未启用 CRC32
选项,则此方法将始终返回 0。
返回迄今为止未压缩数据的 adler32 值。
如果在该对象的构造函数中未启用 ADLER32
选项,则此方法将始终返回 0;
返回 zlib 生成的最后一个错误消息。
返回输入到 inflate 的压缩字节总数。
返回从 inflate 输出的解压缩字节总数。
返回用于执行解压缩的缓冲区大小。
这是一个使用inflate
的示例。
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
$status = $x->inflate($input, $output) ;
print $output ;
last if $status != Z_OK ;
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
下一个示例展示了如何使用LimitOutput
选项。请注意,在这种情况下使用了两个嵌套循环。外层循环从输入源(STDIN)读取数据,内层循环重复调用inflate
,直到$input
耗尽、出现错误或到达流的末尾。值得记住的一点是,使用LimitOutput
选项也会设置ConsumeInput
,这使得下面的代码更加简单。
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
OUTER:
while (read(STDIN, $input, 4096))
{
do
{
$status = $x->inflate($input, $output) ;
print $output ;
last OUTER
unless $status == Z_OK || $status == Z_BUF_ERROR ;
}
while ($status == Z_OK && length $input);
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
zlib提供了两个函数来计算校验和。对于 Perl 接口,这两个函数中两个参数的顺序已颠倒。这允许同时进行校验和计算和一次性计算。
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
缓冲区参数可以是标量或标量引用。
如果 $crc 参数为undef
,则 crc 值将被重置。
如果您使用的是 zlib 1.2.3 或更高版本,则可以使用另外两个与 CRC 相关的函数。
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
这些函数允许合并校验和。有关更多详细信息,请参阅zlib文档。
如果此模块使用zlib库构建,则返回zlib库的版本。如果此模块使用zlib-ng库在原生模式下构建,则此函数将返回空字符串。如果此模块使用zlib-ng库在兼容模式下构建,则此函数将返回zlib-ng支持的 Izlib> API 版本。
如果此模块使用zlib-ng库构建,则返回zlib-ng库的版本。如果此模块使用zlib库构建,则此函数将返回空字符串。
返回指示用于构建 zlib 或 zlib-ng 库的编译时选项的标志。有关zlibCompileFlags
返回的标志的描述,请参阅 zlib 文档。
请注意,当 zlib 源代码与该模块一起构建时,应忽略sprintf
标志(位 24、25 和 26)。
如果您使用的是 zlib 1.2.0 或更早版本,zlibCompileFlags
将返回 0。
这些函数可以用来检查Compress::Raw::Zlib
是否是用zlib或zlib-ng构建的。
函数is_zlib_native
如果Compress::Raw::Zlib
是用zlib构建的,则返回true。函数is_zlibng
如果Compress::Raw::Zlib
是用zlib-ng构建的,则返回true。
zlib-ng库有一个选项可以与zlib兼容的API一起构建。c<is_zlibng_compat>函数如果zlib-ng是用这个API构建的,则返回true。
最后,is_zlibng_native
如果zlib-ng是用其原生API构建的,则返回true。
默认情况下,$i->inflate($input, $output)
将解压缩$input
中的所有数据,并将它生成的所有解压缩数据写入$output
。这使得inflate
的接口更加简单 - 如果该方法成功解压缩了$input
,那么$input
中的所有压缩数据都将被处理。因此,如果您正在从输入源读取数据并边读取边解压缩,代码将类似于以下内容
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
$status = $x->inflate($input, $output) ;
print $output ;
last if $status != Z_OK ;
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
需要注意的是
代码中的主要处理循环负责从STDIN读取压缩数据。
从inflate
返回的状态码只有在它不是Z_OK
时才会触发主处理循环的终止。当没有使用LimitOutput
时,Z_OK
状态意味着压缩数据流的末尾已经到达,或者解压缩过程中出现了错误。
在调用inflate
之后,$input
中的所有解压缩数据都将被处理。这意味着随后的read
调用可以覆盖其内容,而不会出现任何问题。
对于大多数用例,上面描述的行为是可以接受的(此模块及其前身Compress::Zlib
已使用它超过 10 年,没有出现问题),但在一些非常具体的用例中,$output
所需的内存量可能会过大。例如,如果压缩数据流包含重复数千次的相同模式,则相对较小的压缩数据流可以解压缩成数百兆字节。请记住,inflate
将不断分配内存,直到所有未压缩数据都被写入输出缓冲区 - $output
的大小是无界的。
LimitOutput
选项旨在帮助解决此用例。
使用LimitOutput
时,代码中的主要区别在于必须处理$input
参数仍然包含一些inflate
尚未处理的未压缩数据的情况。如果解压缩成功,inflate
返回的状态码将为Z_OK
,如果输出缓冲区已满,则为Z_BUF_ERROR
。
以下是显示如何使用LimitOutput
的典型代码。
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
OUTER:
while (read(STDIN, $input, 4096))
{
do
{
$status = $x->inflate($input, $output) ;
print $output ;
last OUTER
unless $status == Z_OK || $status == Z_BUF_ERROR ;
}
while ($status == Z_OK && length $input);
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
这次需要注意的几点
代码中现在有两个嵌套循环:外部循环用于像以前一样从 STDIN 读取压缩数据;内部循环用于执行解压缩。
内部解压缩循环有两个退出点。
首先,当inflate
返回的状态码不是Z_OK
或Z_BUF_ERROR
时。这意味着要么已到达压缩数据流的末尾(Z_STREAM_END
),要么压缩数据中存在错误。在这两种情况下,继续读取压缩数据都没有意义,因此两个循环都终止。
第二个退出点测试输入缓冲区$input
中是否还有数据 - 请记住,当使用LimitOutput
时,ConsumeInput
选项会自动启用。当输入缓冲区已耗尽时,外部循环可以再次运行并覆盖现在为空的$input
。
虽然可以使用此模块访问 .zip 文件(需要您付出一些努力),但还有其他可用的 Perl 模块可以为您完成所有繁重的工作。查看Archive::Zip
、Archive::Zip::SimpleZip
、IO::Compress::Zip
和IO::Uncompress::Unzip
。
此模块与 Unix compress
不兼容。
如果您有 uncompress
程序可用,您可以使用它来读取压缩文件
open F, "uncompress -c $filename |";
while (<F>)
{
...
或者,如果您有 gunzip
程序可用,您可以使用它来读取压缩文件
open F, "gunzip -c $filename |";
while (<F>)
{
...
以及使用它来写入压缩文件,如果您有 compress
程序可用
open F, "| compress -c $filename ";
print F "data";
...
close F ;
参见前面的常见问题解答项目。
如果安装了 Archive::Tar
模块,并且 uncompress
或 gunzip
程序可用,您可以使用以下解决方法之一来读取 .tar.Z
文件。
首先使用 uncompress
use strict;
use warnings;
use Archive::Tar;
open F, "uncompress -c $filename |";
my $tar = Archive::Tar->new(*F);
...
以及使用 gunzip
use strict;
use warnings;
use Archive::Tar;
open F, "gunzip -c $filename |";
my $tar = Archive::Tar->new(*F);
...
同样,如果 compress
程序可用,您可以使用它来写入 .tar.Z
文件
use strict;
use warnings;
use Archive::Tar;
use IO::File;
my $fh = new IO::File "| compress -c >$filename";
my $tar = Archive::Tar->new();
...
$tar->write($fh);
$fh->close ;
默认情况下,Compress::Raw::Zlib
将使用 zlib 库版本 1.2.5 的私有副本进行构建。(有关如何覆盖此行为的详细信息,请参见 README 文件)
如果您决定使用不同版本的 zlib 库,您需要了解以下问题
首先,您必须拥有 zlib 1.0.5 或更高版本。
如果您想使用 -Merge
选项与 IO::Compress::Gzip
、IO::Compress::Deflate
和 IO::Compress::RawDeflate
一起使用,您需要拥有 zlib 1.2.1 或更高版本。
当您使用 Compress::Raw::Zlib 时,所有 zlib 常量都会自动导入。
一般反馈/问题/错误报告应发送至 https://github.com/pmqs/Compress-Raw-Zlib/issues(首选)或 https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Zlib。
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
File::GlobMapper,Archive::Zip,Archive::Tar,IO::Zlib
有关 RFC 1950、1951 和 1952,请参见 https://datatracker.ietf.org/doc/html/rfc1950、https://datatracker.ietf.org/doc/html/rfc1951 和 https://datatracker.ietf.org/doc/html/rfc1952
zlib 压缩库由 Jean-loup Gailly [email protected]
和 Mark Adler [email protected]
编写。
zlib 压缩库的主要网站是 http://www.zlib.org。
zlib-ng 压缩库的主要网站是 https://github.com/zlib-ng/zlib-ng。
gzip 的主要网站是 http://www.gzip.org。
此模块由 Paul Marquess 编写,电子邮件地址为 [email protected]
。
请参阅 Changes 文件。
版权所有 (c) 2005-2023 Paul Marquess。保留所有权利。
本程序是自由软件;您可以根据与 Perl 本身相同的条款重新发布和/或修改它。