How it works...

A lot of the main function work is just repetition for you from the last few chapters. The real deal happens below it. In encode_bytes, you can see how to use encoders. You can write to it as much as you want and call finish when you're done.

flate2 gives you several compression options. You can choose your compression strength through the passed Compression instance:

let mut encoder = ZlibEncoder::new(Vec::new(), Compression::Default);

Default is a compromise between speed and size. Your other options are Best, Fast, and None. Additionally, you can specify the encoding algorithm used. flate2 supports zlib, which we use in this recipe, gzip, and plain deflate. If you want to use an algorithm other than zlib, simply replace every mention of it with another supported algorithm. For instance, if you wanted to rewrite the preceding code to use gzip instead, it would look like this:

use flate2::write::GzEncoder;
let mut encoder = GzEncoder::new(Vec::new(), Compression::Default);

For a full list of how the specific encoders are called, visit flate2's documentation at https://docs.rs/flate2/.

Because people would often prefer to compress or decompress whole files instead of byte buffers, there are some convenient methods for that. In fact, they are implemented on every type that implements Read, which means that you can also use them on a BufReader and many other types. encode_file and decode_file use them with zlib in the form of the following lines:

let mut encoded = file.zlib_encode(Compression::Best);
file.zlib_decode().read_to_end(&mut buffer)?;

The same applies to the gzip and deflate algorithms.

In our example, we are compressing and decompressing ferris.png, which is an image of Rust's mascot:

You can find it in the GitHub repository at https://github.com/SirRade/rust-standard-library-cookbook or you can use any other file you want. If you feel like verifying the compression, you can take a look at the original, compressed, and decompressed files to check how much smaller the compressed one is, and that the original and decompressed ones are identical.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.129.210.91