pub struct Decoder<'a, S> { /* private fields */ }Expand description
Decompresses data from a seekable source.
A decoder reads compressed data from a seekable source. By default, it decompresses
everything, from the first to the last frame. This can be changed via DecodeOptions or by
setting the offset after initialization.
Implementations§
Source§impl<'a, S: Seekable> Decoder<'a, S>
impl<'a, S: Seekable> Decoder<'a, S>
Sourcepub fn new(src: S) -> Result<Self>
pub fn new(src: S) -> Result<Self>
Creates a new Decoder with default parameters and src as source.
This is equivalent to calling DecodeOptions::new(src).into_decoder().
§Errors
Fails if the decoder could not be created.
Sourcepub fn with_opts(opts: DecodeOptions<'a, S>) -> Result<Self>
pub fn with_opts(opts: DecodeOptions<'a, S>) -> Result<Self>
Sourcepub fn decompress_with_prefix<'b: 'a>(
&mut self,
buf: &mut [u8],
prefix: Option<&'b [u8]>,
) -> Result<usize>
pub fn decompress_with_prefix<'b: 'a>( &mut self, buf: &mut [u8], prefix: Option<&'b [u8]>, ) -> Result<usize>
Decompresses data from the internal source.
Call this repetetively to fill buf with decompressed data. Returns the number of bytes
written to buf. Decompression is finished when no more bytes are written to buf.
If a prefix is passed, it will be referenced at the beginning of every frame.
Referencing a raw content prefix has almost no CPU nor memory cost.
§Errors
If decompression fails or any parameter is invalid.
Source§impl<S: Seekable> Decoder<'_, S>
impl<S: Seekable> Decoder<'_, S>
Sourcepub fn decompress(&mut self, buf: &mut [u8]) -> Result<usize>
pub fn decompress(&mut self, buf: &mut [u8]) -> Result<usize>
Decompresses data from the internal source.
Call this repetetively to fill buf with decompressed data. Returns the number of bytes
written to buf. Decompression is finished when no more bytes are written to buf.
§Errors
If decompression fails or any parameter is invalid.
§Examples
use zeekstd::Decoder;
let mut decoder = Decoder::new(seekable)?;
// Make sure `buf` is big enough to hold all decompressed data
let mut buf = [0u8; 128];
let mut progress = 0;
// Decompress in a loop until no more bytes are written to `buf`
loop {
let n = decoder.decompress(&mut buf[progress..])?;
if n == 0 {
break;
}
progress += n;
}
Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Resets the current decompresion status.
This resets the internal decompression context as well as decompression offset and limit. The next decompression operation after this function will start from the beginning of the seekable source.
§Examples
use zeekstd::Decoder;
let mut decoder = Decoder::new(seekable)?;
decoder.reset();
assert_eq!(decoder.read_compressed(), 0);
assert_eq!(decoder.offset(), 0);
assert_eq!(decoder.offset_limit(), decoder.seek_table().size_decomp());Sourcepub fn set_lower_frame(&mut self, index: u32) -> Result<u64>
pub fn set_lower_frame(&mut self, index: u32) -> Result<u64>
Sets the decompression offset to the beginning of the frame at index.
This has the same effect as calling Self::set_offset with the decompressed start
position of the frame at index.
§Errors
When the the passed frame index is out of range.
Sourcepub fn set_upper_frame(&mut self, index: u32) -> Result<u64>
pub fn set_upper_frame(&mut self, index: u32) -> Result<u64>
Sets the limit for the decompression offset to the end of the frame at index.
This has the same effect as calling Self::set_offset_limit with the decompressed end
position of the frame at index. The current decompression state will not be reset, it is
possible to change the upper frame in the middle of a decompression operation.
§Errors
When the the passed frame index is out of range.
Sourcepub fn set_offset(&mut self, offset: u64) -> Result<()>
pub fn set_offset(&mut self, offset: u64) -> Result<()>
Sets the decompression offset.
The offset is the position in the decompressed data of the seekable source from which decompression starts. If possible, the decoder will continue decompression from the current internal state.
Note: If the passed offset is not the beginning of a frame, the decoder will perform a dummy decompression from the beginning of the frame up to the offset position.
§Errors
When the passed offset is out of range.
Sourcepub fn set_offset_limit(&mut self, limit: u64) -> Result<()>
pub fn set_offset_limit(&mut self, limit: u64) -> Result<()>
Sets a limit for the decompression offset.
The limit is the position in the decompressed data of the seekable source at which decompression stops. This does not reset the current decompression state, the limit can be changed in the middle of a decompression operation without interrupting the ongoing operation. It is possible to set a limit that is lower than the current decompression offset, however, it will lead to any decompression operation making no progress, i.e. it will produce zero decompressed bytes.
Note: The decoder will immediately stop decompression at the specified limit. The frame checksum of the last decompressed frame will not be verified, if the limit isn’t at the end of a frame.
§Errors
When the passed limit is out of range.
Sourcepub fn read_compressed(&self) -> u64
pub fn read_compressed(&self) -> u64
Gets the total number of compressed bytes read since the last reset.
Sourcepub fn seek_table(&self) -> &SeekTable
pub fn seek_table(&self) -> &SeekTable
Gets a reference to the internal SeekTable.
Sourcepub fn offset_limit(&self) -> u64
pub fn offset_limit(&self) -> u64
Gets the offset limit of this decoder.
Trait Implementations§
Source§impl<S: Seekable> Read for Decoder<'_, S>
Available on crate feature std only.Allows to read decompressed data from a Decoder.
impl<S: Seekable> Read for Decoder<'_, S>
std only.Allows to read decompressed data from a Decoder.
§Examples
use std::{fs::File, io};
use zeekstd::Decoder;
let seekable = File::open("seekable.zst")?;
let mut output = File::create("output")?;
let mut decoder = Decoder::new(seekable)?;
io::copy(&mut decoder, &mut output)?;Similar to regular decompression, this supports frame limits.
decoder.set_lower_frame(2)?;
decoder.set_upper_frame(3)?;
io::copy(&mut decoder, &mut io::stdout())?;And also arbitrary byte offsets.
decoder.set_offset(123)?;
decoder.set_offset_limit(456)?;
io::copy(&mut decoder, &mut io::stdout())?;Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0§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 more§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector)1.0.0§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§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§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf. Read more§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)§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§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read. Read more1.0.0§fn chain<R>(self, next: R) -> Chain<Self, R>
fn chain<R>(self, next: R) -> Chain<Self, R>
Source§impl<S: Seekable> Seek for Decoder<'_, S>
Available on crate feature std only.Allows to set the offset of a Decoder via seeking.
impl<S: Seekable> Seek for Decoder<'_, S>
std only.Allows to set the offset of a Decoder via seeking.
§Examples
use std::io::{Seek, SeekFrom};
use zeekstd::Decoder;
let mut decoder = Decoder::new(seekable)?;
decoder.seek(SeekFrom::Start(7))?;
assert_eq!(decoder.offset(), 7);
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
seek_stream_len)