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


Rust BufRead用法及代码示例


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

用法

pub trait BufRead: Read {
    fn fill_buf(&mut self) -> Result<&[u8]>;
    fn consume(&mut self, amt: usize);

    fn has_data_left(&mut self) -> Result<bool> { ... }
    fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize> { ... }
    fn read_line(&mut self, buf: &mut String) -> Result<usize> { ... }
    fn split(self, byte: u8) -> Split<Self>ⓘNotable traits for Split<B>impl<B: BufRead> Iterator for Split<B>    type Item = Result<Vec<u8>>;    where        Self: Sized,
    { ... }
    fn lines(self) -> Lines<Self>ⓘNotable traits for Lines<B>impl<B: BufRead> Iterator for Lines<B>    type Item = Result<String>;    where        Self: Sized,
    { ... }
}

BufReadRead er 的一种类型,它有一个内部缓冲区,允许它执行额外的读取方式。

例如,在不使用缓冲区的情况下读取 line-by-line 效率很低,因此如果要逐行读取,则需要 BufRead ,其中包括 read_line 方法和 lines 迭代器。

例子

锁定的标准输入实现 BufRead

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

let stdin = io::stdin();
for line in stdin.lock().lines() {
    println!("{}", line.unwrap());
}

如果你有一些实现std::io::Read, 你可以使用std::io::BufReader把它变成一个BufRead.

例如, File 实现了 Read ,但没有实现 BufRead BufReader 来救援!

use std::io::{self, BufReader};
use std::io::prelude::*;
use std::fs::File;

fn main() -> io::Result<()> {
    let f = File::open("foo.txt")?;
    let f = BufReader::new(f);

    for line in f.lines() {
        println!("{}", line.unwrap());
    }

    Ok(())
}

相关用法


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