pub struct ZstdReader<'dict, R> { /* private fields */ }Expand description
A reader that decompresses a zstd stream from an underlying reader.
The underyling reader R should implement the following traits:
std::io::BufRead(required forstd::io::Readandstd::io::BufReadimpls)- (Optional)
std::io::Seek(required forstd::io::Seekimpl)
For async support, see crate::AsyncZstdReader.
§Construction
Create a builder using either ZstdReader::builder (recommended) or
ZstdReader::builder_buffered (to use a custom buffer).
See ZstdReaderBuilder for build options. Call
ZstdReaderBuilder::build to build the ZstdReader instance.
let reader = zstd_framed::ZstdReader::builder(compressed_file)
// .with_seek_table(table) // Provide a seek table if available
.build()?;§Buffering
The decompressed zstd output is always buffered internally. Since the
reader must also implement std::io::BufRead, the compressed input
must also be buffered.
ZstdReader::builder will wrap any reader implmenting std::io::Read
with a recommended buffer size for the input stream. For more control
over how the input gets buffered, you can instead use
ZstdReader::builder_buffered.
§Seeking
ZstdReader implements std::io::Seek as long as the underlying
reader implements std::io::Seek. By default, seeking within the
stream will linearly decompress until reaching the target!
Seeking can do a lot better when the underlying stream is broken up
into multiple frames, such as a stream that uses the zstd seekable format.
You can create such a stream using ZstdWriterBuilder::with_seek_table.
There are two situations where seeking can take advantage of a seek table:
- When a seek table is provided up-front using
ZstdReaderBuilder::with_seek_table. Seecrate::table::read_seek_tablefor reading a seek table from a reader. - When rewinding to a previously-decompressed frame. Frame offsets are automatically recorded during decompression.
Even if a seek table is used, seeking will still need to rewind to the start of a frame, then decompress until reaching the target offset.
Implementations§
Source§impl<R> ZstdReader<'_, BufReader<R>>
impl<R> ZstdReader<'_, BufReader<R>>
Sourcepub fn builder(reader: R) -> ZstdReaderBuilder<BufReader<R>>where
R: Read,
pub fn builder(reader: R) -> ZstdReaderBuilder<BufReader<R>>where
R: Read,
Create a new zstd reader that decompresses the zstd stream from the underlying reader. The provided reader will be wrapped with an appropriately-sized buffer.
Sourcepub fn builder_buffered(reader: R) -> ZstdReaderBuilder<R>
pub fn builder_buffered(reader: R) -> ZstdReaderBuilder<R>
Create a new zstd reader that decompresses the zstd stream from
the underlying reader. The underlying reader must implement
std::io::BufRead, and its buffer will be used directly. When in
doubt, use ZstdReader::builder, which uses an appropriate
buffer size for decompressing a zstd stream.
Trait Implementations§
Source§impl<R> BufRead for ZstdReader<'_, R>where
R: BufRead,
impl<R> BufRead for ZstdReader<'_, R>where
R: BufRead,
Source§fn fill_buf(&mut self) -> Result<&[u8]>
fn fill_buf(&mut self) -> Result<&[u8]>
Read methods, if empty. Read moreSource§fn consume(&mut self, amt: usize)
fn consume(&mut self, amt: usize)
amount of additional bytes from the internal buffer as having been read.
Subsequent calls to read only return bytes that have not been marked as read. Read moreSource§fn has_data_left(&mut self) -> Result<bool, Error>
fn has_data_left(&mut self) -> Result<bool, Error>
buf_read_has_data_left)read. Read more1.83.0 · Source§fn skip_until(&mut self, byte: u8) -> Result<usize, Error>
fn skip_until(&mut self, byte: u8) -> Result<usize, Error>
byte or EOF is reached. Read more1.0.0 · Source§fn read_line(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_line(&mut self, buf: &mut String) -> Result<usize, Error>
0xA byte) is reached, and append
them to the provided String buffer. Read moreSource§impl<R> Read for ZstdReader<'_, R>where
R: BufRead,
impl<R> Read for ZstdReader<'_, R>where
R: BufRead,
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read. Read moreSource§impl<R> Seek for ZstdReader<'_, R>
impl<R> Seek for ZstdReader<'_, R>
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Source§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
seek_stream_len)