Bincode::deserialize_from with BufferedReader



我使用的是一个玩具样例,但实际的是一个非常大的二进制文件,以相同的方式编写。

我试着从一个非常大的二进制文件中读取,我自己也用bincode写的

整个想法是轻松地使用Bincode来创建大文件,并在以后迭代它们

#[macro_use]
extern crate serde;
extern crate bincode;
// use std::fs::File;
use bincode::serialize_into;
use std::io::BufWriter;
#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct MyStruct {
counter: Vec<u32>,
offset: usize,
}
impl MyStruct {
// omitted for conciseness
pub fn new(counter: Vec<u32>, offset: usize) -> Self {
Self { counter, offset }
}
}
fn main() {
let mut vec = Vec::new();
vec.push(100);
vec.push(500);
vec.push(100);
vec.push(500);
vec.push(100);
vec.push(500);
let m = MyStruct::new(vec, 0);
// fill entries in the counter vector
let mut f = BufWriter::new(File::create("foo2.bar").unwrap());
serialize_into(&mut f, &m).unwrap();
let mut vec = Vec::new();
vec.push(100);
vec.push(600);
vec.push(100);
vec.push(500);
vec.push(100);
vec.push(600);
vec.push(500);
vec.push(101241241);
vec.push(600);
let m2 = MyStruct::new(vec, 35);
serialize_into(&mut f, &m2).unwrap();
drop(f);
// let mut buffer;
// buffer = BufReader::open_raw_file("foo2.bar").unwrap();
let input = File::open("foo2.bar").unwrap();
// let buffered = BufReader::new(input);
let mut vecs: Vec<MyStruct> = Vec::new();
loop {
match bincode::deserialize_from(&input) {
Ok(file) => vecs.push(file),
Err(error) => break,
};
}
}

然而,由于读取原始文件,它是非常慢的我如何使用BuffReader来加速我的代码在bincode::deserialize_from?

let input = File::open("foo2.bar").unwrap();
let buffered = BufReader::new(input);

BufReader的用法:

let input = File::open("foo2.bar").unwrap();
let mut buffered = BufReader::new(input);
let mut vecs: Vec<MyStruct> = Vec::new();
loop {
match bincode::deserialize_from(&mut buffered) {
Ok(file) => vecs.push(file),
Err(error) => break,
};
}

最新更新