Struct binrw::io::BufReader

source ·
pub struct BufReader<T> { /* private fields */ }
Available on crate feature std only.
Expand description

A wrapper to add buffering to a read stream.

Unlike std::io::BufReader, this wrapper does not invalidate the read buffer every time a Seek method is called. It also caches the underlying stream position to avoid unnecessary system calls.

Limitations

Reading or seeking the wrapped stream object directly will cause an inconsistency in the internal state of the BufReader. Calling BufReader::seek_invalidate will clear the read buffer and reset the internal state to be consistent with the wrapped stream.

Implementations§

source§

impl<T: Read> BufReader<T>

source

pub fn new(inner: T) -> BufReader<T>

Creates a new BufReader<T> with a default buffer capacity.

source

pub fn with_capacity(capacity: usize, inner: T) -> BufReader<T>

Creates a new BufReader<T> with the specified buffer capacity.

source§

impl<T> BufReader<T>

source

pub fn buffer(&self) -> &[u8]

Returns a reference to the internally buffered data.

source

pub fn capacity(&self) -> usize

Returns the number of bytes the internal buffer can hold at once.

source

pub fn get_mut(&mut self) -> &mut T

Gets a mutable reference to the underlying reader.

It is inadvisable to directly read from the underlying reader as it will, at the least, break the cached position information.

source

pub fn get_ref(&self) -> &T

Gets a reference to the underlying reader.

source

pub fn into_inner(self) -> T

Unwraps this BufReader<T>, returning the underlying reader.

Note that any leftover data in the internal buffer is lost. Therefore, a following read from the underlying reader may lead to data loss.

source§

impl<T: Seek> BufReader<T>

source

pub fn seek_invalidate(&mut self, pos: SeekFrom) -> Result<u64>

Performs a seek that forces invalidation of the buffer and internal position state.

Errors

Returns an error if seeking fails.

Trait Implementations§

source§

impl<T: Read> BufRead for BufReader<T>

source§

fn fill_buf(&mut self) -> Result<&[u8]>

Returns the contents of the internal buffer, filling it with more data from the inner reader if it is empty. Read more
source§

fn consume(&mut self, amt: usize)

Tells this buffer that amt bytes have been consumed from the buffer, so they should no longer be returned in calls to read. Read more
source§

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

🔬This is a nightly-only experimental API. (buf_read_has_data_left)
Check if the underlying Read has any data left to be read. Read more
1.0.0 · source§

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

Read all bytes into buf until the delimiter byte or EOF is reached. Read more
1.0.0 · source§

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

Read all bytes until a newline (the 0xA byte) is reached, and append them to the provided String buffer. Read more
1.0.0 · source§

fn split(self, byte: u8) -> Split<Self>where Self: Sized,

Returns an iterator over the contents of this reader split on the byte byte. Read more
1.0.0 · source§

fn lines(self) -> Lines<Self>where Self: Sized,

Returns an iterator over the lines of this reader. Read more
source§

impl<T: Read> Read for BufReader<T>

source§

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

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

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

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

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

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

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

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

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

Read the exact number of bytes required to fill buf. 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
source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> 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<'_>) -> Result<(), Error>

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

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

Creates a “by reference” adaptor 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§

impl<T: Seek> Seek for BufReader<T>

source§

fn seek(&mut self, pos: 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

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for BufReader<T>where T: RefUnwindSafe,

§

impl<T> Send for BufReader<T>where T: Send,

§

impl<T> Sync for BufReader<T>where T: Sync,

§

impl<T> Unpin for BufReader<T>where T: Unpin,

§

impl<T> UnwindSafe for BufReader<T>where T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<R> BinReaderExt for Rwhere R: Read + Seek,

source§

fn read_type<'a, T>(&mut self, endian: Endian) -> BinResult<T>where T: BinRead, T::Args<'a>: Required + Clone,

Read T from the reader with the given byte order. Read more
source§

fn read_be<'a, T>(&mut self) -> BinResult<T>where T: BinRead, T::Args<'a>: Required + Clone,

Read T from the reader assuming big-endian byte order. Read more
source§

fn read_le<'a, T>(&mut self) -> BinResult<T>where T: BinRead, T::Args<'a>: Required + Clone,

Read T from the reader assuming little-endian byte order. Read more
source§

fn read_ne<'a, T>(&mut self) -> BinResult<T>where T: BinRead, T::Args<'a>: Required + Clone,

Read T from the reader assuming native-endian byte order. Read more
source§

fn read_type_args<'a, T>( &mut self, endian: Endian, args: T::Args<'a> ) -> BinResult<T>where T: BinRead, T::Args<'a>: Clone,

Read T from the reader with the given byte order and arguments. Read more
source§

fn read_be_args<'a, T>(&mut self, args: T::Args<'a>) -> BinResult<T>where T: BinRead, T::Args<'a>: Clone,

Read T from the reader, assuming big-endian byte order, using the given arguments. Read more
source§

fn read_le_args<'a, T>(&mut self, args: T::Args<'a>) -> BinResult<T>where T: BinRead, T::Args<'a>: Clone,

Read T from the reader, assuming little-endian byte order, using the given arguments. Read more
source§

fn read_ne_args<'a, T>(&mut self, args: T::Args<'a>) -> BinResult<T>where T: BinRead, T::Args<'a>: Clone,

Read T from the reader, assuming native-endian byte order, using the given arguments. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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> TakeSeekExt for Twhere T: Read + Seek,

source§

fn take_seek(self, limit: u64) -> TakeSeek<T>

Creates an adapter which will read at most limit bytes from the wrapped stream.
source§

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

§

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 Twhere U: TryFrom<T>,

§

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.