#io-read #io #typed #read-write #read #endianness #write

typed-io

扩展并类型化 std::io 以使其更易于使用

1个不稳定版本

0.1.0 2022年6月3日

#1958 in 编码

MIT/Apache

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"

如果您想增强现有的 ReadWrite 特性,则可以像这样导入扩展方法

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]);

无运行时依赖