compio_io

Struct BufReader

Source
pub struct BufReader<R> { /* private fields */ }
Expand description

Wraps a reader and buffers input from AsyncRead

It can be excessively inefficient to work directly with a AsyncRead instance. A BufReader<R> performs large, infrequent reads on the underlying AsyncRead and maintains an in-memory buffer of the results.

BufReader<R> can improve the speed of programs that make small and repeated read calls to the same file or network socket. It does not help when reading very large amounts at once, or reading just one or a few times. It also provides no advantage when reading from a source that is already in memory, like a Vec<u8>.

When the BufReader<R> is dropped, the contents of its buffer will be discarded. Reading from the underlying reader after unwrapping the BufReader<R> with BufReader::into_inner can cause data loss.

§Caution

Due to the pass-by-ownership nature of completion-based IO, the buffer is passed to the inner reader when fill_buf is called. If the future returned by fill_buf is dropped before inner read is completed, BufReader will not be able to retrieve the buffer, causing panic on next fill_buf call.

Implementations§

Source§

impl<R> BufReader<R>

Source

pub fn new(reader: R) -> Self

Creates a new BufReader with a default buffer capacity. The default is currently 8 KB, but may change in the future.

Source

pub fn with_capacity(cap: usize, reader: R) -> Self

Creates a new BufReader with the specified buffer capacity.

Trait Implementations§

Source§

impl<R: AsyncRead> AsyncBufRead for BufReader<R>

Source§

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

Try fill the internal buffer with data
Source§

fn consume(&mut self, amount: usize)

Mark how much data is read
Source§

impl<R: AsyncRead> AsyncRead for BufReader<R>

Source§

async fn read<B: IoBufMut>(&mut self, buf: B) -> BufResult<usize, B>

Read some bytes from this source into the IoBufMut buffer and return a BufResult, consisting of the buffer and a usize indicating how many bytes were read. Read more
Source§

async fn read_vectored<V: IoVectoredBufMut>( &mut self, buf: V, ) -> BufResult<usize, V>

Like read, except that it reads into a type implements IoVectoredBufMut. Read more
Source§

impl<R: Debug> Debug for BufReader<R>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<R> IntoInner for BufReader<R>

Source§

type Inner = R

The inner type.
Source§

fn into_inner(self) -> Self::Inner

Get the inner buffer.

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<R> UnwindSafe for BufReader<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<A> AsyncReadExt for A
where A: AsyncRead + ?Sized,

Source§

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

Creates a “by reference” adaptor for this instance of AsyncRead. Read more
Source§

async fn read_exact<T: IoBufMut>(&mut self, buf: T) -> BufResult<(), T>

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

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

Read all bytes until underlying reader reaches EOF.
Source§

async fn read_vectored_exact<T: IoVectoredBufMut>( &mut self, buf: T, ) -> BufResult<(), T>

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

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

Creates an adaptor which reads at most limit bytes from it. Read more
Source§

async fn read_u8(&mut self) -> Result<u8>

Read a big endian u8 from the underlying reader.
Source§

async fn read_u8_le(&mut self) -> Result<u8>

Read a little endian u8 from the underlying reader.
Source§

async fn read_u16(&mut self) -> Result<u16>

Read a big endian u16 from the underlying reader.
Source§

async fn read_u16_le(&mut self) -> Result<u16>

Read a little endian u16 from the underlying reader.
Source§

async fn read_u32(&mut self) -> Result<u32>

Read a big endian u32 from the underlying reader.
Source§

async fn read_u32_le(&mut self) -> Result<u32>

Read a little endian u32 from the underlying reader.
Source§

async fn read_u64(&mut self) -> Result<u64>

Read a big endian u64 from the underlying reader.
Source§

async fn read_u64_le(&mut self) -> Result<u64>

Read a little endian u64 from the underlying reader.
Source§

async fn read_u128(&mut self) -> Result<u128>

Read a big endian u128 from the underlying reader.
Source§

async fn read_u128_le(&mut self) -> Result<u128>

Read a little endian u128 from the underlying reader.
Source§

async fn read_i8(&mut self) -> Result<i8>

Read a big endian i8 from the underlying reader.
Source§

async fn read_i8_le(&mut self) -> Result<i8>

Read a little endian i8 from the underlying reader.
Source§

async fn read_i16(&mut self) -> Result<i16>

Read a big endian i16 from the underlying reader.
Source§

async fn read_i16_le(&mut self) -> Result<i16>

Read a little endian i16 from the underlying reader.
Source§

async fn read_i32(&mut self) -> Result<i32>

Read a big endian i32 from the underlying reader.
Source§

async fn read_i32_le(&mut self) -> Result<i32>

Read a little endian i32 from the underlying reader.
Source§

async fn read_i64(&mut self) -> Result<i64>

Read a big endian i64 from the underlying reader.
Source§

async fn read_i64_le(&mut self) -> Result<i64>

Read a little endian i64 from the underlying reader.
Source§

async fn read_i128(&mut self) -> Result<i128>

Read a big endian i128 from the underlying reader.
Source§

async fn read_i128_le(&mut self) -> Result<i128>

Read a little endian i128 from the underlying reader.
Source§

async fn read_f32(&mut self) -> Result<f32>

Read a big endian f32 from the underlying reader.
Source§

async fn read_f32_le(&mut self) -> Result<f32>

Read a little endian f32 from the underlying reader.
Source§

async fn read_f64(&mut self) -> Result<f64>

Read a big endian f64 from the underlying reader.
Source§

async fn read_f64_le(&mut self) -> Result<f64>

Read a little endian f64 from the underlying reader.
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, 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.