4 个版本
0.1.3 | 2024 年 5 月 23 日 |
---|---|
0.1.2 | 2024 年 3 月 26 日 |
0.1.1 | 2024 年 3 月 26 日 |
0.1.0 | 2024 年 3 月 26 日 |
#300 in 异步
每月 99 次下载
10KB
105 代码行
tokio-io-rewind
tokio-io-rewind
是一个 Rust 包,为实现了 AsyncRead
和 AsyncWrite
特性的类型提供包装,允许在读取流的开头添加字节。此功能特别适用于需要重新检查或再次处理从流中读取的数据的场景,因此是网络、解析和代理任务中数据操作的理想选择。
功能
- 添加字节:轻松将字节添加到读取流的开头。
- 透明异步操作:与异步读取和写入操作无缝协作,确保最小开销。
- 灵活性:可用于实现
AsyncRead
和AsyncWrite
的任何类型,提供广泛的应用性。
用法
要使用 tokio-io-rewind
,将其添加为 Cargo.toml
中的依赖项。
[dependencies]
tokio-io-rewind = "0.1"
基本示例
use tokio_io_rewind::Rewind;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use bytes::Bytes;
#[tokio::main]
async fn main() {
let inner_stream = tokio::io::Cursor::new(b"world".to_vec());
let mut rewind_stream = Rewind::new(inner_stream);
// Prepend "hello " to the stream
rewind_stream.rewind(Bytes::from_static(b"hello "));
let mut buf = Vec::new();
rewind_stream.read_to_end(&mut buf).await.unwrap();
assert_eq!(buf, b"hello world");
}
高级用法
对于更高级的使用案例,如预缓冲数据或处理复杂的异步写入操作,可以通过额外的缓冲状态或集成到自定义异步流程中来配置 tokio-io-rewind
。
缓冲初始化
要使用缓冲区初始化,可以使用
let preloaded_buffer = Bytes::from_static(b"initial data");
let rewind_stream = Rewind::new_buffered(inner_stream, preloaded_buffer);
这将预先加载流以“初始数据”,这些数据将在后续数据之前被读取。
许可证
依赖关系
~2.1–3MB
~49K SLoC