Compre...:Bzip2(3perl)

πŸ’– Compress::Raw::Bzip2 πŸ’–

okay bestie, welcome to the Perl Programmers Reference Guide entry for Compress::Raw::Bzip2 β€” yes that long name, yes it's giving ✨ abbreviated in the header ✨, whatever, we know her πŸ’…


πŸŽ€ NAME πŸŽ€

Compress::Raw::Bzip2 β€” a low-level interface to the bzip2 compression library. that's it, that's the whole vibe πŸ¦‹


✨ SYNOPSIS ✨

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

see how clean that is?? obsessed 😭


🌸 DESCRIPTION 🌸

so Compress::Raw::Bzip2 hands you an interface to the in-memory compression and uncompression functions that live inside the bzip2 compression library. no files, no drama, just memory 🧠✨

and ngl, the main reason Compress::Raw::Bzip2 even exists is so that IO::Compress::Bzip2 and IO::Compress::Bunzip2 can do their thing. but β€” and this is the part people sleep on β€” you can absolutely use it all by itself for simple compression / uncompression tasks. main character energy fr fr πŸ‘‘


πŸ”₯ Compression πŸ”₯

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

this constructor makes you a shiny new compression object πŸŽ‰

if it works, you get back the initialised compression object $z and a $status of BZ_OK β€” that's in list context. if you're in scalar context, you only get the deflation object $z. that's it, just $z, no status, no nothing πŸ™ˆ

if it does not work, then $z comes back as undef and $status holds the bzip2 error code. so like, always check, bestie πŸ’€

here's the full menu of valid options:

  • $appendOutput β€” controls whether the compressed data gets appended to the output buffer, in the bzdeflate, bzflush and bzclose methods. defaults to 1.
  • $blockSize100k β€” okay, since bzip2 said it best, quoting the bzip2 documentation:
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.

defaults to 1.

  • $workfactor β€” and again, quoting the bzip2 documentation:
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.

defaults to 0.


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

reads whatever's in $input, squishes it, and writes the compressed data into $output πŸ—œοΈβœ¨

returns BZ_RUN_OK when it goes well, and a bzip2 error code when it does not 😭

if appendOutput was enabled in the constructor for the bzip2 object, the compressed data gets appended to $output. if it wasn't enabled, $output gets truncated first, before the compressed data is written to it. no takebacks πŸ’…


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

flushes any pending compressed data out to $output 🚰

returns BZ_RUN_OK on success, and a bzip2 error code on failure.


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

ends the compressed data stream and flushes any pending compressed data to $output. it's the goodbye-but-make-it-final 🎬

returns BZ_STREAM_END on success, and a bzip2 error code on failure.


Example

(this subsection is here, iconic and mysterious, with nothing under it β€” we respect her privacy) 🌈


πŸ¦‹ Uncompression πŸ¦‹

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

if it works out, you get the initialised uncompression object $z and a $status of BZ_OK in list context. in scalar context you get the deflation object $z and only $z ✨

if it doesn't work, $z is undef and $status holds the bzip2 error code. same rules as before, bestie 🫢

the valid options, coming right up:

  • $appendOutput β€” controls whether the compressed data is appended to the output buffer in the bzinflate, bzflush and bzclose methods. defaults to 1.
  • $consumeInput β€” yep.
  • $small β€” quoting the bzip2 documentation:
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).

defaults to 0.

  • $limitOutput β€” the LimitOutput option changes how the $i->bzinflate method behaves, so that the amount of memory used by the output buffer can actually be limited 🧠

when LimitOutput is in play, the size of the output buffer used will either be the 16k or the amount of memory already allocated to $output β€” whichever is larger. predicting the output size you'll have available is tricky, so please don't rely on getting an exact output buffer size πŸ™

when LimitOutout is not specified, $i->bzinflate will use as much memory as it takes to write out all the uncompressed data it creates by uncompressing the input buffer. (yes, unlimited. no, we can't stop her.)

if LimitOutput is enabled, the ConsumeInput option will also be enabled. package deal πŸ’ž

this option defaults to false.

  • $verbosity β€” this parameter is ignored. literally nothing happens. defaults to 0.

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

uncompresses $input and writes the uncompressed data to $output πŸͺ„

returns BZ_OK if the uncompression was successful but the end of the compressed data stream hasn't been reached yet. returns BZ_STREAM_END on successful uncompression and the end of the compression stream has been reached. two different good endings πŸŽ€

if consumeInput was enabled in the constructor for the bunzip2 object, then after uncompression $input will have all compressed data removed from it. on a BZ_OK return that means $input will be an empty string; on BZ_STREAM_END, $input will either be an empty string or will contain whatever data immediately followed the compressed data stream πŸ‘€

if appendOutput was enabled in the constructor for the bunzip2 object, the uncompressed data gets appended to $output. if it wasn't enabled, $output gets truncated before the uncompressed data is written to it. periodt.


⭐ Misc ⭐

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

returns the version of the underlying bzip2 library. that's the whole function. short queen πŸ’œ


πŸ‘‘ Constants πŸ‘‘

these bzip2 constants are exported by this module, all of them, no crumbs:

  • 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

🫢 SUPPORT 🫢

got general feedback, questions or bug reports? send them to <https://github.com/pmqs/Compress-Raw-Bzip2/issues> (that one's preferred πŸ’–) or to <https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Bzip2>.


🌈 SEE ALSO 🌈

  • 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

the primary site for the bzip2 program is <https://sourceware.org/bzip2/> 🌐

also go see the module Compress::Bzip2 ✨


πŸŽ€ AUTHOR πŸŽ€

this module was written by Paul Marquess, pmqs@cpan.org. king behaviour πŸ‘‘


πŸ“œ MODIFICATION HISTORY πŸ“œ

see the Changes file. iykyk.


Copyright (c) 2005-2026 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.


okay that's the whole page bestie, you're officially literate in low-level bzip2 now, slay πŸ’…βœ¨ β€” with love from perl v5.44.0, dated 2026-10-17, page Compre...:Bzip2(3perl), mwah 😘

πŸ“¦ where this page comes from
  • arch rolling: perl 5.44.0-1 Β· Artistic-1.0-Perl AND GPL-1.0-or-later
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms