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
12KB
205 行
模拟 C++ cin/ifstream 的输入包
Rcin 非常适合原型设计,并且相较于经典的 BufReader 方法具有一个关键优势。与字符串一起工作的 BufRead/Read 的唯一方法是 read_to_string
和 read_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