6 个版本
0.2.0 | 2023年2月17日 |
---|---|
0.1.4 | 2023年2月2日 |
0.1.3 | 2022年4月6日 |
0.1.0 | 2022年2月1日 |
#4 in #cap
29 个月下载量
在 4 crates 中使用
13KB
245 行
capwriter
带有标签的向量和切片的快速保存和加载
用法
use capwriter::{Save, Load};
let vec_to_save: Vec<i32> = vec![1, 2, 3, 4, 5];
// (1) Save
let mut buffer = Vec::new();
vec_to_save.save_to(&mut buffer).unwrap();
assert_eq!(vec_to_save.to_be_saved_size(), buffer.len()); // size can be estimated
// (2) Load
let vec_loaded = Vec::<i32>::load_from(
std::io::Cursor::new(buffer)
).unwrap();
assert_eq!(vec_to_save, vec_loaded);
支持类型
- trait
Save
可以在Vec<T>
,&[T]
- trait
Load
可以在Vec<T>
- 对于
T
类型:()
,u8
,u16
,u32
,u64
,u128
,usize
,i8
,i16
,i32
,i64
,i128
,isize
,f32
,f64
,Option<T>
,PhantomData<T>
- 在
bytemuck
(https://crates.io/crates/bytemuck) 包中实现 traitPod (Plain Old Data)
。
- 在
基准测试
-
使用
cargo bench
运行基准测试 -
对于
Vec<usize>
长度为 10,000,000capwriter 带有序列化数据 保存 21.483 毫秒 25.506 毫秒 加载 12.001 毫秒 77.664 毫秒
注意事项
本库为Rust语言提供了快速保存和加载向量和切片的功能。然而,确保输入数据与预期数据类型匹配非常重要,因为在此没有进行类型断言的安全保护。如果输入数据的类型与预期类型不匹配,可能会出现以下后果:
- 线程可能会崩溃。
- 数据可能成功加载,但由于类型不匹配而无法使用。
- 在某些情况下,由于不正确的容量设置,加载器可能会分配整个内存空间。
虽然情况(2)和(3)并不常见,但了解不进行适当类型检查使用此库的风险非常重要。建议对库进行彻底的测试,以不同类型的数据进行测试,并在您的应用程序代码中适当处理错误,以防止崩溃和其他意外行为。
依赖项
~255KB