1个不稳定版本
0.1.0 | 2022年6月3日 |
---|
#1958 in 编码
16KB
356 行
类型化I/O
类型化I/O扩展并类型化 std::io
以使其更易于使用。
typed_io
包含了在进行输入输出时所需的一些常见功能。此模块的最核心部分是 TypedRead 和 TypedWrite 特性,它们提供了读取和写入输入输出的最通用接口,类型易于处理。
动机
创建此库的动机是我希望直接处理类型。
仅使用 std::io
,你必须编写一些陈词滥调的语句,如下所示。
use std::io::Read;
let mut reader: &[u8] = &[1, 0];
let mut buf = [0; std::mem::size_of::<u16>()];
reader.read_exact(&mut buf).unwrap();
let which_i_want = u16::from_le_bytes(buf);
assert_eq!(1_u16, which_i_want);
因此,我决定掩盖它们。
use typed_io::TypedRead;
let mut reader: &[u8] = &[1, 0];
let which_i_want: u16 = reader.read_le().unwrap();
assert_eq!(1_u16, which_i_want);
作为副作用,它还隐藏了原始数据 [u8]
并允许以类型状态处理它。
入门指南
安装
此crate与Cargo兼容,位于 crates.io。将其添加到您的 Cargo.toml
中,如下所示
[dependencies]
typed-io = "0.1"
如果您想增强现有的 Read
和 Write
特性,则可以像这样导入扩展方法
use typed_io::{TypedRead, TypedWrite};
示例
类型化读取
use std::io::Cursor;
use typed_io::TypedRead;
let mut reader = Cursor::new(vec![1, 2, 3, 4]);
assert_eq!(258_u16, reader.read_be().unwrap());
assert_eq!(772_u16, reader.read_be().unwrap());
类型化写入
use typed_io::TypedWrite;
let mut writer = Vec::new();
writer.write_le(1_u16).unwrap();
writer.write_be(2_u16).unwrap();
assert_eq!(writer, [1, 0, 0, 2]);