#vector #slice #serialization #loading #saving #cap #io

capwriter

带有标签的向量和切片的快速保存和加载

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 中使用

MIT 许可证

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>

基准测试

  • 使用 cargo bench 运行基准测试

  • 对于 Vec<usize> 长度为 10,000,000

    capwriter 带有序列化数据
    保存 21.483 毫秒 25.506 毫秒
    加载 12.001 毫秒 77.664 毫秒

注意事项

本库为Rust语言提供了快速保存和加载向量和切片的功能。然而,确保输入数据与预期数据类型匹配非常重要,因为在此没有进行类型断言的安全保护。如果输入数据的类型与预期类型不匹配,可能会出现以下后果:

  1. 线程可能会崩溃。
  2. 数据可能成功加载,但由于类型不匹配而无法使用。
  3. 在某些情况下,由于不正确的容量设置,加载器可能会分配整个内存空间。

虽然情况(2)和(3)并不常见,但了解不进行适当类型检查使用此库的风险非常重要。建议对库进行彻底的测试,以不同类型的数据进行测试,并在您的应用程序代码中适当处理错误,以防止崩溃和其他意外行为。

依赖项

~255KB