當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。