4 个版本

0.2.1 2020 年 3 月 29 日
0.2.0 2020 年 3 月 29 日
0.1.1 2020 年 3 月 24 日
0.1.0 2020 年 3 月 24 日

16#input-stream

MIT 许可证

12KB
205

模拟 C++ cin/ifstream 的输入包

Rcin 非常适合原型设计,并且相较于经典的 BufReader 方法具有一个关键优势。与字符串一起工作的 BufRead/Read 的唯一方法是 read_to_stringread_line,如果大文件只包含一行或几行,这些方法可能无法使用。

与 Rust 的类似输入流相比,rcin 可以提取单个字符。

Rcin 还包括对 stdin 的静态包装器

示例

从 stdin 读取

    
    let mut i = rin.read().unwrap_or(2020); // read any type that implements FromString
    
    while rin >> &mut i{ // c++ style operator overload
        println!("{}", i);
    }
    
    cin.read_line(); // read a line

读取文件或任何实现了 Read 的源

    let f = File::open("test.txt").unwrap();
    let mut reader = RInStream::from_file(f); // create RInStream instance
    reader.skip_line();                       // skip first line
    while reader.valid(){                     // while there are no errors from the source
        match reader.read::<i32>(){           // read i32
            Some(v) => (),
            None => ()
        }
    }

内部机制

内部流缓冲区像 BufRead 一样缓冲源数据,使用相同的默认缓冲区大小,然后尝试从字节序列中提取有效的 utf8 字符。

Utf8 提供了许多空白字符,但最常用的只由一个字节组成(制表符、空格等)。如果将来有任何版本存在,它们可能会放弃对不常用空白字符的支持,以加快解析过程并使用内置的 utf8 解析器。这也意味着此类流将无法高效地逐字符读取数据。

依赖项

~10KB