]>
iEval git - io-compress-brotli.git/blob - Brotli.pm
f472ca989afb0d5e9bef138a3c612487442272ee
1 package IO
::Uncompress
::Brotli
;
6 use parent qw
/Exporter/;
8 our @EXPORT = qw
/unbro/;
9 our @EXPORT_OK = @EXPORT;
11 our $VERSION = '0.004_002';
14 XSLoader
::load
('IO::Compress::Brotli', $VERSION);
16 # 0.004001 has unbro with prototype $$
17 # 0.004_002 renames it to unbro_given_size, and provides unbro with
18 # prototype $;$ which calls:
19 # * unbro_given_size when called with two arguments
20 # * the OO interface when called with one argument
22 my ($buffer, $decoded_size) = @_;
23 if (defined $decoded_size) {
24 return unbro_given_size
($buffer, $decoded_size)
26 my $bro = IO
::Uncompress
::Brotli
->create;
27 return $bro->decompress($buffer);
38 IO::Uncompress::Brotli - Read Brotli buffers/streams
42 use IO::Uncompress::Brotli;
44 # uncompress a buffer (yielding at most 10MB)
45 my $decoded = unbro $encoded, 10_000_000;
48 my $bro = IO::Uncompress::Brotli->create;
50 my $block = get_input_block();
51 my $decoded_block = $bro->decompress($block);
52 handle_output_block($decoded_block);
57 IO::Uncompress::Brotli is a module that decompresses Brotli buffers
58 and streams. Despite its name, it is not a subclass of
59 L<IO::Uncompress::Base> and does not implement its interface. This
60 will be rectified in a future release.
62 =head2 One-shot interface
64 If you have the whole buffer in a Perl scalar use the B<unbro>
69 =item B<unbro>(I<$input>, I<$maximum_decoded_size>)
71 Takes a whole compressed buffer as input and returns the decompressed
72 data. It allocates a buffer of size I<$maximum_decoded_size> to store
73 the decompressed data, if this is not sufficient (or there is another
74 error) this function will croak.
76 As of version 0.004_002, the I<$maximum_decoded_size> argument is
77 optional. If not provided, B<unbro> uses the streaming interface
78 described in the next section to decompress the buffer in blocks of
79 one megabyte. The decompressed blocks are concatenated and returned.
85 =head2 Streaming interface
87 If you want to process the data in blocks use the object oriented
88 interface. The available methods are:
92 =item IO::Uncompress::Brotli->B<create>
94 Returns a IO::Uncompress::Brotli instance. Please note that a single
95 instance cannot be used to decompress multiple streams.
97 =item $bro->B<decompress>(I<$block>)
99 Takes the a block of compressed data and returns a block of
100 uncompressed data. Dies on error.
106 RFC 7392 Brotli Compressed Data Format:
107 L<https://tools.ietf.org/html/rfc7932>
109 Brotli source code: L<https://github.com/google/brotli/>
113 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
115 The encoder bindings, modernisation of the decoder bindings and a
116 clean up of the overall project were contributed by:
120 =item Quim Rovira, E<lt>quim@rovira.catE<gt>
122 =item Ævar Arnfjörð Bjarmason, E<lt>avarab@gmail.comE<gt>
124 =item Marcell Szathmári
126 =item Mattia Barbon, E<lt>mattia@barbon.orgE<gt>
130 POD fix by Mark Zabaro, E<lt>markzabaro@gmail.comE<gt>.
132 =head1 COPYRIGHT AND LICENSE
134 Copyright (C) 2015-2018 by Marius Gavrilescu
136 This library is free software; you can redistribute it and/or modify
137 it under the same terms as Perl itself, either Perl version 5.20.2 or,
138 at your option, any later version of Perl 5 you may have available.
This page took 0.051525 seconds and 3 git commands to generate.