当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Read用法及代码示例


本文简要介绍rust语言中 Trait std::io::Read 的用法。

用法

pub trait Read {
    fn read(&mut self, buf: &mut [u8]) -> Result<usize>;

    fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize> { ... }
    fn is_read_vectored(&self) -> bool { ... }
    unsafe fn initializer(&self) -> Initializer { ... }
    fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> { ... }
    fn read_to_string(&mut self, buf: &mut String) -> Result<usize> { ... }
    fn read_exact(&mut self, buf: &mut [u8]) -> Result<()> { ... }
    fn by_ref(&mut self) -> &mut Self    where        Self: Sized,
    { ... }
    fn bytes(self) -> Bytes<Self>ⓘNotable traits for Bytes<R>impl<R: Read> Iterator for Bytes<R>    type Item = Result<u8>;    where        Self: Sized,
    { ... }
    fn chain<R: Read>(self, next: R) -> Chain<Self, R>ⓘNotable traits for Chain<T, U>impl<T: Read, U: Read> Read for Chain<T, U>    where        Self: Sized,
    { ... }
    fn take(self, limit: u64) -> Take<Self>ⓘNotable traits for Take<T>impl<T: Read> Read for Take<T>    where        Self: Sized,
    { ... }
}

Read trait 允许从源读取字节。

Read 特征的实现者称为'readers'。

读者由一种必需的方法定义, read() 。对 read() 的每次调用都将尝试从该源中提取字节到提供的缓冲区中。在 read() 方面实现了许多其他方法,为实现者提供了多种读取字节的方法,而只需要实现一个方法。

读者旨在相互组合。 std::io 中的许多实现者采用并提供实现 Read 特征的类型。

请注意,对 read() 的每次调用都可能涉及系统调用,因此,使用实现了 BufRead 的东西,例如 BufReader ,效率会更高。

例子

File 实现 Read

use std::io;
use std::io::prelude::*;
use std::fs::File;

fn main() -> io::Result<()> {
    let mut f = File::open("foo.txt")?;
    let mut buffer = [0; 10];

    // read up to 10 bytes
    f.read(&mut buffer)?;

    let mut buffer = Vec::new();
    // read the whole file
    f.read_to_end(&mut buffer)?;

    // read into a String, so that you don't need to do the conversion.
    let mut buffer = String::new();
    f.read_to_string(&mut buffer)?;

    // and more! See the other methods for more details.
    Ok(())
}

&str 读取,因为 &[u8] 实现了 Read

use std::io::prelude::*;

fn main() -> io::Result<()> {
    let mut b = "This string will be read".as_bytes();
    let mut buffer = [0; 10];

    // read up to 10 bytes
    b.read(&mut buffer)?;

    // etc... it works exactly as a File does!
    Ok(())
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::io::Read。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。