作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Bytes
结构中有一个固定大小的缓冲区,我想在其中复制一些数据。
目前我唯一能看到的是从开始处截取一部分,添加我想要的内容,然后在末尾添加切片,但我确信这会产生一两个大副本我想避免,我只需要更新缓冲区的中间部分。有没有不使用 unsafe
的简单方法?
最佳答案
你不变异Bytes
.该结构的全部目的是表示数据的引用计数不可变 View 。您将需要以某种方式复制数据。也许你创建了一个 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));
}
另见:
without using
unsafe
不要使用 unsafe
对于这个问题。您将导致未定义的行为。
关于rust - 如何更新 Bytes/BytesMut 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62029662/
我是一名优秀的程序员,十分优秀!