Skip to main content

IndexedReader

Struct IndexedReader 

Source
pub struct IndexedReader<R: ReadAt> { /* private fields */ }
Expand description

A Read and Seek view of decompressed bytes described by an index.

Seeking resumes at the nearest preceding checkpoint and discards output up to the requested byte. Gzip-member and zlib-header checkpoints permit full checksum verification, including discarded bytes. An interior DEFLATE checkpoint cannot authenticate the skipped prefix because the index does not store its checksum state. Raw DEFLATE has no container checksum.

The index is validated and a known compressed size is compared with the source before construction succeeds. Callers remain responsible for pairing indexes without a recorded size with the source from which they were built.

Implementations§

Source§

impl<R: ReadAt> IndexedReader<R>

Source

pub fn new(source: R, index: DeflateIndex) -> Result<Self, IndexedReaderError>

Opens source for random access through index.

§Errors

Returns an error when the index violates its invariants, the source length cannot be read or disagrees with a known index size, or the raw inflate backend cannot be initialized.

Source

pub fn with_window_cache_bytes(self, bytes: usize) -> Self

Sets the expanded-window cache budget in bytes.

Source

pub const fn index(&self) -> &DeflateIndex

Returns the index backing this reader.

Source

pub const fn position(&self) -> u64

Returns the decompressed offset of the next byte a read returns.

Source

pub fn into_inner(self) -> (R, DeflateIndex)

Returns the source and index, discarding decoding state.

Source

pub fn seek_to_line(&mut self, line: u64) -> Result<u64>

Seeks to the first byte of zero-based line and returns its byte offset.

The reader resumes from the nearest preceding annotated checkpoint and scans forward only far enough to find the requested newline. Seeking beyond the recorded lines positions the reader at decoded EOF.

§Errors

Returns io::ErrorKind::Unsupported unless the index carries a total line count and a line offset for every checkpoint. Other errors have the same meaning as Read and Seek errors from this reader.

Trait Implementations§

Source§

impl<R: ReadAt> Read for IndexedReader<R>

Source§

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

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

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

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_, u8>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact( &mut self, cursor: BorrowedCursor<'_, u8>, ) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

fn read_array<const N: usize>(&mut self) -> Result<[u8; N], Error>
where Self: Sized,

🔬This is a nightly-only experimental API. (read_array)
Read and return a fixed array of bytes from this source. Read more
Source§

fn read_le<T>(&mut self) -> Result<T, Error>
where T: FromEndianBytes, Self: Sized,

🔬This is a nightly-only experimental API. (read_le)
Read and return a type (e.g. an integer) in little-endian order. Read more
Source§

fn read_be<T>(&mut self) -> Result<T, Error>
where T: FromEndianBytes, Self: Sized,

🔬This is a nightly-only experimental API. (read_le)
Read and return a type (e.g. an integer) in big-endian order. Read more
Source§

impl<R: ReadAt> Seek for IndexedReader<R>

Source§

fn seek(&mut self, target: SeekFrom) -> Result<u64>

Seek to an offset, in bytes, in a stream. Read more
Source§

fn stream_position(&mut self) -> Result<u64>

Returns the current seek position from the start of the stream. Read more
1.55.0 · Source§

fn rewind(&mut self) -> Result<(), Error>

Rewind to the beginning of a stream. Read more
Source§

fn stream_len(&mut self) -> Result<u64, Error>

🔬This is a nightly-only experimental API. (seek_stream_len)
Returns the length of this stream (in bytes). Read more
1.80.0 · Source§

fn seek_relative(&mut self, offset: i64) -> Result<(), Error>

Seeks relative to the current position. Read more

Auto Trait Implementations§

§

impl<R> !Send for IndexedReader<R>

§

impl<R> !Sync for IndexedReader<R>

§

impl<R> Freeze for IndexedReader<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for IndexedReader<R>
where R: RefUnwindSafe,

§

impl<R> Unpin for IndexedReader<R>
where R: Unpin,

§

impl<R> UnsafeUnpin for IndexedReader<R>
where R: UnsafeUnpin,

§

impl<R> UnwindSafe for IndexedReader<R>
where R: UnwindSafe,

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.