/
fast_seeking.rs
39 lines (35 loc) · 1.06 KB
/
fast_seeking.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use q_compress::{Compressor, Decompressor};
use rand::Rng;
use std::io::Write;
use std::time::Instant;
fn main() {
let mut compressor = Compressor::<f64>::default();
compressor.header().expect("header");
let n_chunks = 10;
let mut rng = rand::thread_rng();
for _ in 0..n_chunks {
let mut nums = Vec::new();
for _ in 0..100000 {
nums.push(rng.gen::<f64>());
}
compressor.chunk(&nums).expect("write chunk");
}
compressor.footer().expect("footer");
// now read back only the metadata
let bytes = compressor.drain_bytes();
let mut decompressor = Decompressor::<f64>::default();
decompressor.write_all(&bytes).unwrap();
let start_t = Instant::now();
decompressor.header().expect("flags");
let mut metadatas = Vec::new();
while let Some(meta) = decompressor.chunk_metadata().expect("read chunk") {
metadatas.push(meta);
decompressor.skip_chunk_body().expect("skipping");
}
let n: usize = metadatas.iter().map(|meta| meta.n).sum();
println!(
"seeked through {} entries in {:?}",
n,
Instant::now() - start_t
);
}