pub struct ConcatReader<I: IntoIterator> { /* private fields */ }
Expand description
The ConcatReader
struct allows to read from multiple readers in a sequential order.
If the current reader reaches its EOF
the ConcatReader
will start reading from the next
reader in the iterator. If all readers reached EOF
the ConcatReader
will also be EOF
.
§Examples
use concat_reader::*;
use std::fs::File;
use std::io;
use std::io::prelude::*;
fn main() -> io::Result<()> {
let foo = File::open("foo.txt")?;
let bar = File::open("bar.txt")?;
let baz = File::open("bar.txt")?;
let files = [foo, bar, baz];
let mut c = ConcatReader::new(&files);
let mut buffer = [0; 10];
// read up to 10 bytes
let n = c.read(&mut buffer[..])?;
println!("The bytes: {:?}", &buffer[..n]);
//skip to the next file
c.skip();
let mut buffer = Vec::new();
// read all rest files into a single buffer
c.read_to_end(&mut buffer)?;
Ok(())
}
Implementations§
Source§impl<I> ConcatReader<I>
impl<I> ConcatReader<I>
Trait Implementations§
Source§impl<I> ConcatRead for ConcatReader<I>
impl<I> ConcatRead for ConcatReader<I>
Source§impl<I> Debug for ConcatReader<I>
impl<I> Debug for ConcatReader<I>
Source§impl<I> From<I> for ConcatReader<I>
impl<I> From<I> for ConcatReader<I>
Source§fn from(iter: I) -> ConcatReader<I> ⓘ
fn from(iter: I) -> ConcatReader<I> ⓘ
Converts to this type from the input type.
Source§impl<I> Read for ConcatReader<I>
impl<I> Read for ConcatReader<I>
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” adaptor for this instance of
Read
. Read moreAuto Trait Implementations§
impl<I> Freeze for ConcatReader<I>
impl<I> RefUnwindSafe for ConcatReader<I>
impl<I> Send for ConcatReader<I>
impl<I> Sync for ConcatReader<I>
impl<I> Unpin for ConcatReader<I>
impl<I> UnwindSafe for ConcatReader<I>
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