我正在尝试从标准输入中逐行读取 JSON 对象流,并从它们中提取“值”键作为字符串:
use rayon::prelude::*; // 1.0.3
use serde_json::Value; // 1.0.37
use std::io::{self, BufRead};
use std::sync::mpsc::channel;
fn main() {
let stdin = io::stdin();
let rx = {
let (tx, rx) = channel();
for line in stdin.lock().lines() {
tx.send(line.unwrap()).unwrap();
}
rx
};
let it = rx.into_iter().par_bridge().map(|line| -> String {
let v: Value = serde_json::from_str(&line.clone()).unwrap();
let ret = v["value"].as_str().unwrap().into();
println!("{}", ret);
ret
});
eprintln!("Starting actual work.");
it.for_each(|x| {
println!("{}", x);
});
}
eprintln!()
永远不会被调用并且我的内存不足,因为我使用一个巨大的文件作为输入。为什么map()
不只返回一个我可以使用的迭代器,而是等待它的输入结束?