内容

名称

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 模块为 zlibzlib-ng 压缩库提供了一个 Perl 接口(有关从哪里获取 zlibzlib-ng 的详细信息,请参见 "参见")。

在下文中,除非另有说明,所有对 zlib 的引用也适用于 zlib-ng

Compress::Raw::Zlib::Deflate

本节定义了一个接口,允许使用 zlib 提供的 deflate 接口进行内存内压缩。

以下是可用接口的定义

($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] )

初始化一个解压缩对象。

如果您熟悉 zlib 库,它将结合 zlib 函数 deflateInitdeflateInit2deflateSetDictionary 的功能。

如果成功,它将在列表上下文中返回已初始化的解压缩对象 $d$statusZ_OK。在标量上下文中,它只返回解压缩对象 $d

如果失败,返回的解压缩对象 $d 将为 undef,而 $status 将包含一个 zlib 错误代码。

该函数可以选择接受以 Name => value 对形式指定的多个命名选项。这允许在不指定所有参数的情况下定制单个选项。

为了向后兼容,也可以将参数作为包含 name=>value 对的哈希的引用传递。

以下是有效选项的列表

-Level

定义压缩级别。有效值为 0 到 9、Z_NO_COMPRESSIONZ_BEST_SPEEDZ_BEST_COMPRESSIONZ_DEFAULT_COMPRESSION

默认值为 Z_DEFAULT_COMPRESSION

-Method

定义压缩方法。目前唯一有效的(也是默认的)值为 Z_DEFLATED

-WindowBits

要压缩 RFC 1950 数据流,将 WindowBits 设置为 8 到 15 之间的正数。

要压缩 RFC 1951 数据流,将 WindowBits 设置为 -MAX_WBITS

要压缩 RFC 1952 数据流(即 gzip),将 WindowBits 设置为 WANT_GZIP

有关 WindowBits 的含义和有效值的定义,请参阅 zlib 文档中的 deflateInit2

默认为 MAX_WBITS

-MemLevel

有关 MemLevel 的含义和有效值的定义,请参阅 zlib 文档中的 deflateInit2

默认为 MAX_MEM_LEVEL。

-Strategy

定义用于调整压缩的策略。有效值为 Z_DEFAULT_STRATEGYZ_FILTEREDZ_RLEZ_FIXEDZ_HUFFMAN_ONLY

默认值为 Z_DEFAULT_STRATEGY

-Dictionary

当指定字典时,Compress::Raw::Zlib 将在调用 deflateInit 后立即自动调用 deflateSetDictionary。可以通过调用方法 $d->dict_adler() 获取字典的 Adler32 值。

默认情况下不使用字典。

-Bufsize

设置 $d->deflate$d->flush 方法使用的输出缓冲区的初始大小。如果必须重新分配缓冲区以增加大小,它将以 Bufsize 的增量增长。

默认缓冲区大小为 4096。

-AppendOutput

此选项控制 $d->deflate$d->flush 方法如何将数据写入输出缓冲区。

如果 AppendOutput 选项设置为 false,则 $d->deflate$d->flush 方法中的输出缓冲区将在写入未压缩数据之前被截断。

如果该选项设置为 true,则未压缩数据将附加到 $d->deflate$d->flush 方法中的输出缓冲区。

此选项默认设置为 false。

-CRC32

如果设置为 true,将计算未压缩数据的 crc32 校验和。使用 $d->crc32 方法检索此值。

此选项默认设置为 false。

-ADLER32

如果设置为 true,将计算未压缩数据的 adler32 校验和。使用 $d->adler32 方法检索此值。

此选项默认设置为 false。

以下是如何使用 Compress::Raw::Zlib::Deflate 可选参数列表来覆盖默认缓冲区大小和压缩级别的示例。所有其他选项将采用其默认值。

my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300,
                                           -Level   => Z_BEST_SPEED ) ;

$status = $d->deflate($input, $output)

压缩 $input 的内容并将压缩后的数据写入 $output

$input$output 参数可以是标量或标量引用。

完成后,$input 将被完全处理(假设没有错误)。如果压缩成功,它将压缩后的数据写入 $output 并返回状态值为 Z_OK

发生错误时,它将返回一个 zlib 错误代码。

如果在 $d 对象的构造函数中将 AppendOutput 选项设置为 true,则压缩后的数据将被追加到 $output。如果为 false,则在写入任何压缩数据之前,$output 将被截断。

注意:此方法并不一定每次调用时都会将压缩后的数据写入 $output。因此,不要假设如果从该方法返回时 $output 的内容为空,则发生了错误。只要该方法的返回值为 Z_OK,则压缩就已成功。

$status = $d->flush($output [, $flush_type])

通常用于完成压缩。任何待处理的输出将被写入 $output

如果成功,则返回 Z_OK

请注意,刷新会严重降低压缩率,因此它只应用于终止解压缩(使用 Z_FINISH)或当您想要创建一个 完全刷新点(使用 Z_FULL_FLUSH)时。

默认情况下,使用的 flush_typeZ_FINISHflush_type 的其他有效值为 Z_NO_FLUSHZ_PARTIAL_FLUSHZ_SYNC_FLUSHZ_FULL_FLUSH。强烈建议您只有在完全理解其含义的情况下才设置 flush_type 参数。有关详细信息,请参阅 zlib 文档。

如果在 $d 对象的构造函数中将 AppendOutput 选项设置为 true,则压缩后的数据将被追加到 $output。如果为 false,则在写入任何压缩数据之前,$output 将被截断。

$status = $d->deflateReset()

此方法将重置压缩对象 $d。 当您压缩多个数据流并希望使用同一个对象压缩每个数据流时,可以使用此方法。 只有在先前数据流成功刷新后才能使用此方法,即调用 $d->flush(Z_FINISH) 返回 Z_OK

如果成功,则返回 Z_OK

$status = $d->deflateParams([OPT])

更改压缩对象 $d 的设置。

下面列出了有效的选项。 未指定的选项将保持不变。

-Level

定义压缩级别。有效值为 0 到 9、Z_NO_COMPRESSIONZ_BEST_SPEEDZ_BEST_COMPRESSIONZ_DEFAULT_COMPRESSION

-Strategy

定义用于调整压缩的策略。 有效值为 Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLY

-BufSize

设置 $d->deflate$d->flush 方法使用的输出缓冲区的初始大小。如果必须重新分配缓冲区以增加大小,它将以 Bufsize 的增量增长。

$status = $d->deflateTune($good_length, $max_lazy, $nice_length, $max_chain)

调整压缩对象 $d 的内部设置。 此选项仅在您运行 zlib 1.2.2.3 或更高版本时可用。

有关如何使用 deflateTune 的说明,请参阅 zlib.h 中的文档。

$d->dict_adler()

返回字典的 adler32 值。

$d->crc32()

返回迄今为止未压缩数据的 crc32 值。

如果此对象的构造函数中未启用 CRC32 选项,则此方法将始终返回 0。

$d->adler32()

返回迄今为止未压缩数据的 adler32 值。

$d->msg()

返回 zlib 生成的最后一个错误消息。

$d->total_in()

返回输入到压缩的未压缩字节总数。

$d->total_out()

返回从 deflate 输出的压缩字节总数。

$d->get_Strategy()

返回当前使用的压缩策略。有效值为 Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLY

$d->get_Level()

返回正在使用的压缩级别。

$d->get_BufSize()

返回用于执行压缩的缓冲区大小。

示例

这是一个使用 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 ;

Compress::Raw::Zlib::Inflate

本节定义了一个接口,允许使用 zlib 提供的 inflate 接口进行内存内解压缩。

以下是接口的定义

($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] )

初始化一个解压缩对象。

在列表上下文中,它返回解压缩对象 $izlib 状态代码 ($status)。在标量上下文中,它只返回解压缩对象。

如果成功,$i 将保存解压缩对象,$status 将为 Z_OK

如果不成功,$i 将为 undef$status 将保存 zlib 错误代码。

该函数可以选择接受以 -Name => value 对形式指定的多个命名选项。这允许在不指定参数列表中的所有选项的情况下定制单个选项。

为了向后兼容,也可以将参数作为对包含 name=>value 对的哈希的引用传递。

以下是有效选项的列表

-WindowBits

要解压缩 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

-Bufsize

设置 $i->inflate 方法使用的输出缓冲区的初始大小。如果此方法中的输出缓冲区必须重新分配以增加大小,它将以 Bufsize 的增量增长。

默认值为 4096。

-Dictionary

默认情况下不使用字典。

-AppendOutput

此选项控制 $i->inflate 方法如何将数据写入输出缓冲区。

如果选项设置为 false,则 $i->inflate 方法中的输出缓冲区将在写入解压缩数据之前被截断。

如果选项设置为 true,则 $i->inflate 方法将解压缩数据追加到输出缓冲区。

此选项默认设置为 false。

-CRC32

如果设置为 true,将计算解压缩数据的 crc32 校验和。使用 $i->crc32 方法检索此值。

此选项默认设置为 false。

-ADLER32

如果设置为 true,将计算解压缩数据的 adler32 校验和。使用 $i->adler32 方法检索此值。

此选项默认设置为 false。

-ConsumeInput

如果设置为 true,此选项将在 inflate 进度时从 $i->inflate 方法的输入缓冲区中删除压缩数据。

当您处理嵌入在另一个文件/缓冲区中的压缩数据时,此选项很有用。在这种情况下,紧随压缩流之后的数据将保留在输入缓冲区中。

此选项默认为 true。

-LimitOutput

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 ) ;

$status = $i->inflate($input, $output [,$eof])

解压缩 $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. 您正在使用比版本 1.2.0 更早的 zlib 版本,或者您希望您的应用程序代码能够与尽可能多的不同版本的 zlib 一起运行。

  2. 您已将 WindowBits 参数设置为 -MAX_WBITS,在该对象的构造函数中,即您正在解压缩原始的压缩数据流(RFC 1951)。

  3. 压缩数据流之后没有立即出现数据。

如果所有这些都是这种情况,那么您需要在对 $i->inflate 的最后一次调用(并且仅在最后一次调用)中将 $eof 参数设置为 true。

如果您使用 zlib >= 1.2.0 构建了此模块,则会忽略 $eof 参数。您仍然可以设置它,但它不会在后台使用。

$status = $i->inflateSync($input)

此方法可用于尝试从部分损坏的压缩数据流中恢复良好数据。它扫描 $input,直到到达完全刷新点或缓冲区的末尾。

如果找到完全刷新点,则返回 Z_OK,并且 $input 将删除所有直到刷新点的数据。然后可以将此数据传递给 $i->inflate 方法进行解压缩。

任何其他返回代码都表示未找到刷新点。如果有更多数据可用,则可以重复调用 inflateSync,使用更多压缩数据,直到找到刷新点。

请注意,完全刷新点在默认情况下不会出现在压缩数据流中。它们必须在创建数据流时通过调用 Compress::Deflate::flush 并使用 Z_FULL_FLUSH 显式添加。

$status = $i->inflateReset()

此方法将重置膨胀对象 $i。当您解压缩多个数据流并希望使用同一个对象解压缩每个数据流时,可以使用此方法。

如果成功,则返回 Z_OK

$i->dict_adler()

返回字典的 adler32 值。

$i->crc32()

返回迄今为止未压缩数据的 crc32 值。

如果此对象的构造函数中未启用 CRC32 选项,则此方法将始终返回 0。

$i->adler32()

返回迄今为止未压缩数据的 adler32 值。

如果在该对象的构造函数中未启用 ADLER32 选项,则此方法将始终返回 0;

$i->msg()

返回 zlib 生成的最后一个错误消息。

$i->total_in()

返回输入到 inflate 的压缩字节总数。

$i->total_out()

返回从 inflate 输出的解压缩字节总数。

$d->get_BufSize()

返回用于执行解压缩的缓冲区大小。

示例

这是一个使用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文档。

杂项

my $version = Compress::Raw::Zlib::zlib_version();

如果此模块使用zlib库构建,则返回zlib库的版本。如果此模块使用zlib-ng库在原生模式下构建,则此函数将返回空字符串。如果此模块使用zlib-ng库在兼容模式下构建,则此函数将返回zlib-ng支持的 Izlib> API 版本。

my $version = Compress::Raw::Zlib::zlibng_version();

如果此模块使用zlib-ng库构建,则返回zlib-ng库的版本。如果此模块使用zlib库构建,则此函数将返回空字符串。

my $flags = Compress::Raw::Zlib::zlibCompileFlags();

返回指示用于构建 zlib 或 zlib-ng 库的编译时选项的标志。有关zlibCompileFlags返回的标志的描述,请参阅 zlib 文档。

请注意,当 zlib 源代码与该模块一起构建时,应忽略sprintf标志(位 24、25 和 26)。

如果您使用的是 zlib 1.2.0 或更早版本,zlibCompileFlags将返回 0。

is_zlib_native(); =head2 is_zlibng_native(); =head2 is_zlibng_compat(); =head2 is_zlibng();

这些函数可以用来检查Compress::Raw::Zlib是否是用zlibzlib-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。

LimitOutput选项。

默认情况下,$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 ;

需要注意的是

对于大多数用例,上面描述的行为是可以接受的(此模块及其前身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 ;

这次需要注意的几点

访问 ZIP 文件

虽然可以使用此模块访问 .zip 文件(需要您付出一些努力),但还有其他可用的 Perl 模块可以为您完成所有繁重的工作。查看Archive::ZipArchive::Zip::SimpleZipIO::Compress::ZipIO::Uncompress::Unzip

常见问题解答

与 Unix compress/uncompress 的兼容性。

此模块与 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 ;

访问 .tar.Z 文件

参见前面的常见问题解答项目。

如果安装了 Archive::Tar 模块,并且 uncompressgunzip 程序可用,您可以使用以下解决方法之一来读取 .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 ;

Zlib 库版本支持

默认情况下,Compress::Raw::Zlib 将使用 zlib 库版本 1.2.5 的私有副本进行构建。(有关如何覆盖此行为的详细信息,请参见 README 文件)

如果您决定使用不同版本的 zlib 库,您需要了解以下问题

常量

当您使用 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::ZlibIO::Compress::GzipIO::Uncompress::GunzipIO::Compress::DeflateIO::Uncompress::InflateIO::Compress::RawDeflateIO::Uncompress::RawInflateIO::Compress::Bzip2IO::Uncompress::Bunzip2IO::Compress::LzmaIO::Uncompress::UnLzmaIO::Compress::XzIO::Uncompress::UnXzIO::Compress::LzipIO::Uncompress::UnLzipIO::Compress::LzopIO::Uncompress::UnLzopIO::Compress::LzfIO::Uncompress::UnLzfIO::Compress::ZstdIO::Uncompress::UnZstdIO::Uncompress::AnyInflateIO::Uncompress::AnyUncompress

IO::Compress::FAQ

File::GlobMapperArchive::ZipArchive::TarIO::Zlib

有关 RFC 1950、1951 和 1952,请参见 https://datatracker.ietf.org/doc/html/rfc1950https://datatracker.ietf.org/doc/html/rfc1951https://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 本身相同的条款重新发布和/或修改它。