pub struct SmartBuf<R: Read + Seek + Send + 'static> { /* private fields */ }Expand description
A buffered reader with background thread pre-fetching and seek support.
SmartBuf wraps a Read + Seek implementation and provides:
- Off-thread pre-fetch buffering for improved read performance
- Full seek support, optimizing for seeks within buffered data
§Examples
use smartbuf::SmartBuf;
use std::io::{Read, Seek, SeekFrom, Cursor};
let data = b"Hello, world!";
let cursor = Cursor::new(data);
let mut reader = SmartBuf::new(cursor);
let mut buf = vec![0; 5];
reader.read(&mut buf).unwrap();
assert_eq!(&buf, b"Hello");
reader.seek(SeekFrom::Start(0)).unwrap();
let mut buf = vec![0; 5];
reader.read(&mut buf).unwrap();
assert_eq!(&buf, b"Hello");Implementations§
Source§impl<R: Read + Seek + Send + 'static> SmartBuf<R>
impl<R: Read + Seek + Send + 'static> SmartBuf<R>
Sourcepub fn new(reader: R) -> Self
pub fn new(reader: R) -> Self
Creates a new SmartBuf with default buffer size (8KB) and queue length (2).
Sourcepub fn with_capacity(bufsize: usize, queuelen: usize, reader: R) -> Self
pub fn with_capacity(bufsize: usize, queuelen: usize, reader: R) -> Self
Creates a new SmartBuf with the specified buffer size and queue length.
bufsize is the size of each buffer chunk in bytes.
queuelen is the number of buffers to keep in the queue (must be >= 1).
Sourcepub fn buffer_size(&self) -> usize
pub fn buffer_size(&self) -> usize
Returns the buffer size.
Sourcepub fn into_inner(self) -> Result<R>
pub fn into_inner(self) -> Result<R>
Consumes the SmartBuf and returns the underlying reader.
This method stops the background thread and returns the reader that was
being used for buffering. After calling this method, the SmartBuf is
no longer usable.
§Examples
use smartbuf::SmartBuf;
use std::io::Cursor;
let cursor = Cursor::new(vec![1, 2, 3, 4, 5]);
let smart_buf = SmartBuf::new(cursor);
// Get the underlying reader back
let reader = smart_buf.into_inner().unwrap();Trait Implementations§
Source§impl<R: Read + Seek + Send + 'static> Read for SmartBuf<R>
impl<R: Read + Seek + Send + 'static> Read for SmartBuf<R>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
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
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>
Like
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
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>
Reads all bytes until EOF in this source, placing them into
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>
Reads all bytes until EOF in this source, appending them to
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>
Reads the exact number of bytes required to fill
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
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>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf)Reads the exact number of bytes required to fill
cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adapter for this instance of
Read. Read moreSource§impl<R: Read + Seek + Send + 'static> Seek for SmartBuf<R>
impl<R: Read + Seek + Send + 'static> Seek for SmartBuf<R>
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
Seek to an offset, in bytes, in a stream. Read more
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
Source§fn stream_len(&mut self) -> Result<u64, Error>
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<R> Freeze for SmartBuf<R>
impl<R> !RefUnwindSafe for SmartBuf<R>
impl<R> Send for SmartBuf<R>
impl<R> Sync for SmartBuf<R>where
R: Sync,
impl<R> Unpin for SmartBuf<R>where
R: Unpin,
impl<R> !UnwindSafe for SmartBuf<R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more