内容

名称

Compress::Raw::Bzip2 - bzip2 压缩库的低级接口

概要

use Compress::Raw::Bzip2 ;

my ($bz, $status) = new Compress::Raw::Bzip2 [OPTS]
    or die "Cannot create bzip2 object: $bzerno\n";

$status = $bz->bzdeflate($input, $output);
$status = $bz->bzflush($output);
$status = $bz->bzclose($output);

my ($bz, $status) = new Compress::Raw::Bunzip2 [OPTS]
    or die "Cannot create bunzip2 object: $bzerno\n";

$status = $bz->bzinflate($input, $output);

my $version = Compress::Raw::Bzip2::bzlibversion();

描述

Compress::Raw::Bzip2 提供了对 bzip2 压缩库中内存压缩/解压缩函数的接口。

虽然 Compress::Raw::Bzip2 的主要存在目的是供 IO::Compress::Bzip2IO::Compress::Bunzip2 模块使用,但它也可以单独用于简单的压缩/解压缩任务。

压缩

($z, $status) = new Compress::Raw::Bzip2 $appendOutput, $blockSize100k, $workfactor;

创建一个新的压缩对象。

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

如果失败,返回的压缩对象 $z 将为 undef,而 $status 将包含 bzip2 错误代码。

以下是有效选项的列表

$appendOutput

控制压缩数据是否在 bzdeflatebzflushbzclose 方法中追加到输出缓冲区。

默认为 1。

$blockSize100k

引用 bzip2 文档

blockSize100k specifies the block size to be used for compression. It
should be a value between 1 and 9 inclusive, and the actual block size
used is 100000 x this figure. 9 gives the best compression but takes
most memory.

默认为 1。

$workfactor

引用 bzip2 文档

This parameter controls how the compression phase behaves when
presented with worst case, highly repetitive, input data. If
compression runs into difficulties caused by repetitive data, the
library switches from the standard sorting algorithm to a fallback
algorithm. The fallback is slower than the standard algorithm by
perhaps a factor of three, but always behaves reasonably, no matter how
bad the input.

Lower values of workFactor reduce the amount of effort the standard
algorithm will expend before resorting to the fallback. You should set
this parameter carefully; too low, and many inputs will be handled by
the fallback algorithm and so compress rather slowly, too high, and
your average-to-worst case compression times can become very large. The
default value of 30 gives reasonable behaviour over a wide range of
circumstances.

Allowable values range from 0 to 250 inclusive. 0 is a special case,
equivalent to using the default value of 30.

默认为 0。

$status = $bz->bzdeflate($input, $output);

读取 $input 的内容,压缩它并将压缩后的数据写入 $output

成功时返回 BZ_RUN_OK,失败时返回 bzip2 错误代码。

如果在 bzip2 对象的构造函数中启用了 appendOutput,则压缩后的数据将追加到 $output。如果未启用,则在将压缩后的数据写入 $output 之前,$output 将被截断。

$status = $bz->bzflush($output);

将任何待处理的压缩数据刷新到 $output

成功时返回 BZ_RUN_OK,失败时返回 bzip2 错误代码。

$status = $bz->bzclose($output);

终止压缩数据流并将任何待处理的压缩数据刷新到 $output

成功时返回 BZ_STREAM_END,失败时返回 bzip2 错误代码。

示例

解压缩

($z, $status) = new Compress::Raw::Bunzip2 $appendOutput, $consumeInput, $small, $verbosity, $limitOutput;

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

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

以下是有效选项的列表

$appendOutput

控制压缩数据是否在 bzinflatebzflushbzclose 方法中追加到输出缓冲区。

默认为 1。

$consumeInput
$small

引用 bzip2 文档

If small is nonzero, the library will use an alternative decompression
algorithm which uses less memory but at the cost of decompressing more
slowly (roughly speaking, half the speed, but the maximum memory
requirement drops to around 2300k).

默认为 0。

$limitOutput

LimitOutput 选项更改 $i->bzinflate 方法的行为,以便可以限制输出缓冲区使用的内存量。

当使用 LimitOutput 时,使用的输出缓冲区的大小将是 16k 或已分配给 $output 的内存量,以较大者为准。预测可用的输出大小很棘手,因此不要依赖于获得确切的输出缓冲区大小。

如果未指定 LimitOutout$i->bzinflate 将使用尽可能多的内存来写入解压缩输入缓冲区时创建的所有未压缩数据。

如果启用了 LimitOutput,则 ConsumeInput 选项也将被启用。

此选项默认值为 false。

$verbosity

此参数被忽略。

默认为 0。

$status = $z->bzinflate($input, $output);

解压缩 $input 并将未压缩数据写入 $output

如果解压缩成功,但未到达压缩数据流的末尾,则返回 BZ_OK。如果解压缩成功且已到达压缩流的末尾,则返回 BZ_STREAM_END

如果在 bunzip2 对象的构造函数中启用了 consumeInput,则 $input 将在解压缩后删除所有压缩数据。在 BZ_OK 返回时,这意味着 $input 将是一个空字符串;当 BZ_STREAM_END 时,$input 将是一个空字符串,或者包含紧随压缩数据流之后的任何数据。

如果在 bunzip2 对象的构造函数中启用了 appendOutput,则未压缩数据将追加到 $output。如果未启用,则在将未压缩数据写入 $output 之前,$output 将被截断。

杂项

my $version = Compress::Raw::Bzip2::bzlibversion();

返回底层 bzip2 库的版本。

常量

此模块导出以下 bzip2 常量

BZ_RUN
BZ_FLUSH
BZ_FINISH

BZ_OK
BZ_RUN_OK
BZ_FLUSH_OK
BZ_FINISH_OK
BZ_STREAM_END
BZ_SEQUENCE_ERROR
BZ_PARAM_ERROR
BZ_MEM_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_IO_ERROR
BZ_UNEXPECTED_EOF
BZ_OUTBUFF_FULL
BZ_CONFIG_ERROR

支持

一般反馈/问题/错误报告应发送到 https://github.com/pmqs/Compress-Raw-Bzip2/issues(优先)或 https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Bzip2

另请参阅

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

bzip2 程序的主要站点是 https://sourceware.org/bzip2/

参见模块 Compress::Bzip2

作者

此模块由 Paul Marquess 编写,[email protected]

修改历史

参见 Changes 文件。

版权和许可

版权所有 (c) 2005-2023 Paul Marquess。保留所有权利。

本程序是自由软件;您可以根据与 Perl 本身相同的条款重新发布和/或修改它。