pub struct RangeReader<R> { /* private fields */ }Expand description
A reader that reads a specific range of data from a ReaderAt source.
RangeReader implements std::io::Read and provides bounded reading
within a specified range of offsets. It maintains its current position and
ensures reads don’t exceed the defined end boundary.
Useful when working with APIs that operate on std::io::Read instead of
ReaderAt. For instance, incrementally reading large prelude and trailing
data of a ZIP file.
§Examples
Reading prelude data from a zip file:
use std::io::Read;
use rawzip::{ZipArchive, RangeReader, RECOMMENDED_BUFFER_SIZE};
use std::fs::File;
let file = File::open("assets/test-prefix.zip")?;
let mut buffer = vec![0u8; RECOMMENDED_BUFFER_SIZE];
let archive = ZipArchive::from_file(file, &mut buffer)?;
// Typically you only need the first entry to find where the zip data starts
// but this is the longer form that examines every entry in case they are
// out of order
let mut zip_start_offset = archive.directory_offset();
let mut entries = archive.entries(&mut buffer);
while let Some(entry) = entries.next_entry()? {
zip_start_offset = zip_start_offset.min(entry.local_header_offset());
}
// For example purposes, just slurp up all the prelude data
let mut prelude_reader = RangeReader::new(archive.get_ref(), 0..zip_start_offset);
prelude_reader.read_exact(&mut buffer[..zip_start_offset as usize])?;
assert_eq!(
&buffer[..zip_start_offset as usize],
b"prefix that could be an executable jar file"
);Implementations§
Source§impl<R> RangeReader<R>
impl<R> RangeReader<R>
Sourcepub fn new(archive: R, range: Range<u64>) -> Self
pub fn new(archive: R, range: Range<u64>) -> Self
Creates a new RangeReader that will read data from the specified range.
Sourcepub fn remaining(&self) -> u64
pub fn remaining(&self) -> u64
Returns the remaining bytes that are expected to be read from the current position.
When a range reader is constructed with a range that exceeds the
underlying reader, remaining will be non-zero when read() returns zero
signalling the end of the stream.
Sourcepub fn end_offset(&self) -> u64
pub fn end_offset(&self) -> u64
Returns the end offset of the range.
Sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Consumes the self and returns the underlying reader.
Trait Implementations§
Source§impl<R: Clone> Clone for RangeReader<R>
impl<R: Clone> Clone for RangeReader<R>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<R: Debug> Debug for RangeReader<R>
impl<R: Debug> Debug for RangeReader<R>
Source§impl<R> Read for RangeReader<R>where
R: ReaderAt,
impl<R> Read for RangeReader<R>where
R: ReaderAt,
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 more