如何更新 Bytes/BytesMut 的一部分?

stu*_*stu 3 buffer rust

我在结构中有一个固定大小的缓冲区Bytes,我想在其中复制一些数据。

目前我唯一能看到的就是从开头切下一部分,添加我想要的内容,然后在末尾添加切片,但我确信这会产生一两个我想要的大副本避免,我只需要更新缓冲区的中间。有没有一种简单的方法可以在不使用的情况下做到这一点unsafe

She*_*ter 7

不会变异Bytes。该结构的全部目的是表示数据的引用计数不可变视图。您将需要以某种方式复制数据。也许您根据数据创建了Vec<u8>或。BytesMut

BytesMut实现AsMut<[u8]>BorrowMut<[u8]>DerefMut,因此您可以使用任何现有技术就地修改切片。例如:

use bytes::BytesMut; // 0.5.4

fn main() {
    let mut b = BytesMut::new();
    b.extend_from_slice(b"a good time");

    let middle = &mut b[2..][..4];
    middle.copy_from_slice(b"cool");

    println!("{}", String::from_utf8_lossy(&b));
}
Run Code Online (Sandbox Code Playgroud)

也可以看看:

不使用unsafe

请勿用于unsafe解决此问题。你导致未定义的行为。


归档时间:

查看次数:

2578 次

最近记录:

5 年,4 月 前