rust - 为什么每种情况下读取的字节数不同?
问题描述
Snippet 正在尝试计算以下读取的字节数sample.txt
样本.txt
one two three four five six
seven eight nine ten eleven twelve
thirteen fourteen fifteen sixteen
%
情况1:
let file = File::open(fname)?;
let mut reader = BufReader::new(&file);
let mut buffer: Vec<u8> = vec![];
let num_bytes = reader.read_until(b'%', &mut buffer);
//println!("{}", String::from_utf8(buffer).unwrap());
println!("read_bytes: {}", num_bytes.unwrap());
read_bytes: 101
案例2:
let file = File::open(fname)?;
let mut reader = BufReader::new(&file);
let mut num_bytes: u32 = 0;
for readline in reader.lines() {
if let Ok(line) = readline {
//println!("{}", line);
let bytes = line.as_bytes();
num_bytes += bytes.len() as u32;
if bytes == b"%" {
break;
}
}
}
println!("read_bytes: {}", num_bytes)
read_bytes: 98
我似乎无法弄清楚为什么这两种情况会输出不同的结果。任何帮助表示感谢
解决方案
从文档中BufRead.lines
:
从这个函数返回的迭代器将产生
io::Result<String>
. 返回的每个字符串都 没有 换行字节。
您的计数减少了 3,因为数据中有 3 行,并且在第二个示例中没有计算换行符。
推荐阅读
- rxjs - 如何使 observable 重复
- python - Tkinter 中的条目小部件导致的空白空间
- flutter - 验证谷歌登录的问题
- veins - 为什么handlePositionUpdate(cObject* obj)中的变量“curSpeed”等于(-0,0,0)?
- flutter - Flutter & Dart & Telegram Bot:如何将带有任何关键字的消息发送到我的电报机器人中?
- pyspark - 在 pyspark reducyByKey 上出现 Py4J 错误(初学者)
- python-3.x - 需要帮助从文本文件读取行到 dict
- mysql - 在 MySQL 中对行进行分组并选择最高 ID
- ios - 是否可以缩小 SwiftUI 网格周围的空间?
- c++ - 自定义构造函数不会进入 for 循环(C++)