我在结构中有一个固定大小的缓冲区Bytes
,我想在其中复制一些数据。
目前我唯一能看到的就是从开头切下一部分,添加我想要的内容,然后在末尾添加切片,但我确信这会产生一两个我想要的大副本避免,我只需要更新缓冲区的中间。有没有一种简单的方法可以在不使用的情况下做到这一点unsafe
?
你不会变异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 次 |
最近记录: |