#delimiter #slice #tokio #async-read #read-stream #async-buf-read #read-until

read_until_slice

AsyncBufRead::read_until 扩展,使用切片作为分隔符而不是单个 u8

7 个版本

新版本 0.1.6 2024 年 8 月 9 日
0.1.5 2024 年 6 月 2 日
0.1.4 2024 年 5 月 4 日
0.1.2 2024 年 2 月 18 日

#400异步

Download history 102/week @ 2024-04-27 216/week @ 2024-05-04 4/week @ 2024-05-11 23/week @ 2024-05-18 18/week @ 2024-05-25 171/week @ 2024-06-01 20/week @ 2024-06-08 10/week @ 2024-06-15 3/week @ 2024-06-22 36/week @ 2024-06-29 1/week @ 2024-07-06 2/week @ 2024-07-13 2/week @ 2024-07-20 4/week @ 2024-07-27 75/week @ 2024-08-03

84 每月下载量
3 个 Crates 中使用 (直接使用 2 个)

MIT 许可证

9KB
103

read_until_slice  LICENSE crates.io 版本 文档

tokio io-util 功能提供了该方法

pub async fn read_until(&mut self, delimiter: u8, buf: Vec<u8>) -> Result<usize>

impl AsyncBufRead + Unpin 上。

从这个异步缓冲读取器中读取,直到遇到 EOF 或分隔符。

虽然很有用,但它限制为单个字节的分隔符。

此 crate 通过使用切片作为分隔符而不是单个字节来扩展这一点。

pub async fn read_until_slice(&mut self, delimiter: &[u8], buf: Vec<u8>) -> Result<usize>

在相同的 impl AsyncBufRead + Unpin 上。

示例

// Open socket
let stream = TcpStream::connect(addr)
    .await
    .expect("could not connect to remote address");
// Split stream into reader and writer halves
let (reader, mut writer) = split(stream);
// Buffer read stream
let mut reader = BufReader::new(reader);
...
// Read until new line delimiter into buffer
let mut buffer = vec![];
let delimiter = b"\r\n";
let n = reader.read_until(delimiter, &mut buffer)
    .await
    .expect("could not read from socket");
assert_eq!(n, buffer.len());
if buffer.ends_with(delimiter) {
    println!("end of line delimiter reached");
} else {
    println!("end of stream reached");
}

依赖关系

~2.1–3MB
~49K SLoC