9 个版本
0.2.1 | 2024 年 8 月 11 日 |
---|---|
0.2.0 | 2024 年 7 月 1 日 |
0.2.0-fixed | 2024 年 8 月 11 日 |
0.1.6 | 2024 年 5 月 12 日 |
0.1.0 |
|
#23 in #io-read
192 个月下载量
15KB
275 行
多读取器
multiple-readers
是一个 Rust 库,旨在简化将实现 std::io::Read 特质的多种类型组合成一个统一读取器的过程。
特性
- 将实现 std::io::Read 特质的多种类型组合成一个统一读取器。
- 提供 SliceReader 和 BytesReader 类型,分别包装
&[u8]
和Vec<u8>
,实现 std::io::Read 和 tokio::io::AsyncRead 特质。 - 可以从数据源按顺序读取,直到所有数据源耗尽。
- 支持 tokio (
Unstable
)
示例
use multi_readers::{BytesReader, SliceReader, join_readers};
use std::{fs::File, io::Read};
fn main() -> std::io::Result<()> {
let slice = SliceReader::new(b"First-");
let bytes = BytesReader::new(b"Second-".to_vec());
std::fs::write("test.txt", b"Third")?;
let f = File::open("test.txt")?;
let mut reader = join_readers!(slice, bytes, f);
let mut buf = String::new();
reader.read_to_string(&mut buf)?;
assert_eq!(buf.as_str(), "First-Second-Third");
Ok(())
}
异步示例
- 依赖项
tokio = { version = "*", features = ["full"]}
multi-readers = {version = "*", features = ["async"]}
use multi_readers::*;
use tokio::io::AsyncReadExt;
#[tokio::main]
async fn main() {
let slice1 = SliceReader::new(b"12345");
let slice2 = SliceReader::new(b"2346");
let mut reader = join_async_readers!(slice1, slice2);
let mut buf = [0; 4];
let len = reader.read(&mut buf).await.unwrap();
assert_eq!(&buf[..len], b"1234");
let len = reader.read(&mut buf).await.unwrap();
assert_eq!(&buf[..len], b"5234");
let len = reader.read(&mut buf).await.unwrap();
assert_eq!(&buf[..len], b"6");
}
依赖项
~0–1.1MB
~19K SLoC