Struct GzDecoder

pub struct GzDecoder<W: Write> { /* private fields */ }

A decoder for a single member of a gzip file.

This structure exposes a Write interface, receiving compressed data and writing uncompressed data to the underlying writer.

After decoding a single member of the gzip data this writer will return the number of bytes up to to the end of the gzip member and subsequent writes will return Ok(0) allowing the caller to handle any data following the gzip member.

To handle gzip files that may have multiple members, see MultiGzDecoder or read more in the introduction.

Examples

use std::io::prelude::*;
use std::io;
use flate2::Compression;
use flate2::write::{GzEncoder, GzDecoder};

# fn main() {
#    let mut e = GzEncoder::new(Vec::new(), Compression::default());
#    e.write(b"Hello World").unwrap();
#    let bytes = e.finish().unwrap();
#    assert_eq!("Hello World", decode_writer(bytes).unwrap());
# }
// Uncompresses a gzip encoded vector of bytes and returns a string or error
// Here Vec<u8> implements Write
fn decode_writer(bytes: Vec<u8>) -> io::Result<String> {
   let mut writer = Vec::new();
   let mut decoder = GzDecoder::new(writer);
   decoder.write_all(&bytes[..])?;
   writer = decoder.finish()?;
   let return_string = String::from_utf8(writer).expect("String parsing error");
   Ok(return_string)
}

Implementations

impl<W: Write> GzDecoder<W>

fn new(w: W) -> GzDecoder<W>

Creates a new decoder which will write uncompressed data to the stream.

When this encoder is dropped or unwrapped the final pieces of data will be flushed.

fn header(&self) -> Option<&GzHeader>

Returns the header associated with this stream.

fn get_ref(&self) -> &W

Acquires a reference to the underlying writer.

fn get_mut(&mut self) -> &mut W

Acquires a mutable reference to the underlying writer.

Note that mutating the output/input state of the stream may corrupt this object, so care must be taken when using this method.

fn try_finish(&mut self) -> Result<()>

Attempt to finish this output stream, writing out final chunks of data.

Note that this function can only be used once data has finished being written to the output stream. After this function is called then further calls to write may result in a panic.

Panics

Attempts to write data to this stream may result in a panic after this function is called.

Errors

This function will perform I/O to finish the stream, returning any errors which happen.

fn finish(self) -> Result<W>

Consumes this decoder, flushing the output stream.

This will flush the underlying data stream and then return the contained writer if the flush succeeded.

Note that this function may not be suitable to call in a situation where the underlying stream is an asynchronous I/O stream. To finish a stream the try_finish (or shutdown) method should be used instead. To re-acquire ownership of a stream it is safe to call this method after try_finish or shutdown has returned Ok.

Errors

This function will perform I/O to complete this stream, and any I/O errors which occur will be returned from this function.

Trait Implementations

impl<W: Debug + Write> Debug for GzDecoder<W>

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl<W: Read + Write> Read for GzDecoder<W>

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

impl<W: Write> Write for GzDecoder<W>

fn write(&mut self, buf: &[u8]) -> Result<usize>
fn flush(&mut self) -> Result<()>

Auto Trait Implementations

impl<W> !UnwindSafe for GzDecoder<W>

impl<W> Freeze for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: Freeze,

impl<W> RefUnwindSafe for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: RefUnwindSafe,

impl<W> Send for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: Send,

impl<W> Sync for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: Sync,

impl<W> Unpin for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: Unpin,

impl<W> UnsafeUnpin for GzDecoder<W> where Writer<CrcWriter<W>, Decompress>: UnsafeUnpin,

Blanket Implementations

impl<T> Any for GzDecoder<W> where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for GzDecoder<W> where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for GzDecoder<W> where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> From<T> for GzDecoder<W>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T, U> Into<U> for GzDecoder<W> where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for GzDecoder<W> where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for GzDecoder<W> where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>