< 返回版块

jojo 发表于 2021-09-03 15:43

Tags:Bytes crate

想用 ByteMut 作缓冲区,从同步io数据源中读取数据,可是无法读取,也没报错。。。

fn main() -> io::Result<()> {
    let mut buf = BytesMut::with_capacity(10);

    let mut input: Cursor<Vec<u8>> = Cursor::new({
        (0..100).collect()
    });

    loop {
        match input.read(&mut buf)? {
            0 => {
                println!("[READ OVER]");
                break;
            }
            n => {
                println!("{:?}", &buf);
                println!("[READ ONCE]");
            }
        }
    }

    Ok(())
}

如果只用普通的数组,是可以读取数据

let mut buf = [0; 10];

评论区

写评论
rayw0ng 2021-09-06 14:54

advance到末尾后不会从头开始,我的做法是每次先reserve足够的空间,不知道有没有更好的方法。

作者 jojo 2021-09-03 17:26
  • 从输入源读取一次数据后,会进行解析
  • 届时缓冲区将清空已成功解析的数据、保留由于不完整而未成功解析的数据
  • 再次从输入源读取一次数据,循环往复

我通过 advance 来清空数据,但清空几次后,又再次不能读取了。。
我感觉我的思路不太对,不知道如何使用或实现缓冲区🤣

--
👇
LuoZijun: 将

let mut buf = BytesMut::with_capacity(10);

改写成

let mut buf = BytesMut::with_capacity(10);
buf.resize(10, 0);

LuoZijun 2021-09-03 16:04

let mut buf = BytesMut::with_capacity(10);

改写成

let mut buf = BytesMut::with_capacity(10);
buf.resize(10, 0);

1 共 3 条评论, 1 页