On this page
Struct std::io::Take
pub struct Take<T> { /* private fields */ }
Reader adapter which limits the bytes read from an underlying reader.
This struct is generally created by calling take
on a reader. Please see the documentation of take
for more details.
Implementations
impl<T> Take<T>
pub fn limit(&self) -> u64
Returns the number of bytes that can be read before this instance will return EOF.
Note
This instance may reach EOF
after reading fewer bytes than indicated by this method if the underlying Read
instance reaches EOF.
Examples
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let f = File::open("foo.txt")?;
// read at most five bytes
let handle = f.take(5);
println!("limit: {}", handle.limit());
Ok(())
}
pub fn set_limit(&mut self, limit: u64)
Sets the number of bytes that can be read before this instance will return EOF. This is the same as constructing a new Take
instance, so the amount of bytes read and the previous limit value don’t matter when calling this method.
Examples
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let f = File::open("foo.txt")?;
// read at most five bytes
let mut handle = f.take(5);
handle.set_limit(10);
assert_eq!(handle.limit(), 10);
Ok(())
}
pub fn into_inner(self) -> T
Consumes the Take
, returning the wrapped reader.
Examples
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let mut file = File::open("foo.txt")?;
let mut buffer = [0; 5];
let mut handle = file.take(5);
handle.read(&mut buffer)?;
let file = handle.into_inner();
Ok(())
}
pub fn get_ref(&self) -> &T
Gets a reference to the underlying reader.
Examples
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let mut file = File::open("foo.txt")?;
let mut buffer = [0; 5];
let mut handle = file.take(5);
handle.read(&mut buffer)?;
let file = handle.get_ref();
Ok(())
}
pub fn get_mut(&mut self) -> &mut T
Gets a mutable reference to the underlying reader.
Care should be taken to avoid modifying the internal I/O state of the underlying reader as doing so may corrupt the internal limit of this Take
.
Examples
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let mut file = File::open("foo.txt")?;
let mut buffer = [0; 5];
let mut handle = file.take(5);
handle.read(&mut buffer)?;
let file = handle.get_mut();
Ok(())
}
Trait Implementations
impl<T: BufRead> BufRead for Take<T>
fn fill_buf(&mut self) -> Result<&[u8]>
fn consume(&mut self, amt: usize)
amt
bytes have been consumed from the buffer, so they should no longer be returned in calls to read
. Read more
fn has_data_left(&mut self) -> Result<bool>
buf_read_has_data_left
#86423)
Read
has any data left to be read. Read more
fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize>
fn read_line(&mut self, buf: &mut String) -> Result<usize>
0xA
byte) is reached, and append them to the provided String
buffer. Read more
fn split(self, byte: u8) -> Split<Self> ⓘ
where
Self: Sized,
byte
. Read more
fn lines(self) -> Lines<Self> ⓘ
where
Self: Sized,
impl<T: Debug> Debug for Take<T>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T: Read> Read for Take<T>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<()>
read_buf
#78485)
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
read
, except that it reads into a slice of buffers. Read more
fn is_read_vectored(&self) -> bool
can_vector
#69941)
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
buf
. Read more
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
buf
. Read more
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
buf
. Read more
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
read_buf
#78485)
cursor
. Read more
fn by_ref(&mut self) -> &mut Self
where
Self: Sized,
Read
. Read more
fn bytes(self) -> Bytes<Self> ⓘ
where
Self: Sized,
fn chain<R: Read>(self, next: R) -> Chain<Self, R> ⓘ
where
Self: Sized,
fn take(self, limit: u64) -> Take<Self> ⓘ
where
Self: Sized,
limit
bytes from it. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for Take<T>
where
T: RefUnwindSafe,
impl<T> Send for Take<T>
where
T: Send,
impl<T> Sync for Take<T>
where
T: Sync,
impl<T> Unpin for Take<T>
where
T: Unpin,
impl<T> UnwindSafe for Take<T>
where
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T
where
T: 'static + ?Sized,
impl<T> Borrow<T> for T
where
T: ?Sized,
impl<T> BorrowMut<T> for T
where
T: ?Sized,
impl<T> From<T> for T
fn from(t: T) -> T
Returns the argument unchanged.
impl<T, U> Into<U> for T
where
U: From<T>,
fn into(self) -> U
Calls U::from(self)
.
That is, this conversion is whatever the implementation of From<T> for U
chooses to do.
impl<T, U> TryFrom<U> for T
where
U: Into<T>,
type Error = Infallible
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for T
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/io/struct.Take.html