rust 将切片/缓冲区拆分并对齐为可变块

ars1skjm  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(137)

我希望实现position_io2的ReadAt特性,该特性提供了一个&mut [u8]缓冲区,可以针对一个API写入,该API可以接受针对特定固定大小的512 KB块的并行请求。
问题是我不能保证读取的位置会与这些块边界之一对齐,因此我需要为每个下载闭包提供一个完整缓冲区的切片来写入。
原始方法会导致错误-cannot borrow *buf as mutable more than once at a time

for SnapshotBlock { index, token } in blocks {
    let mut bufOffset: usize = ((index - start_block) * block_size) as usize - start_block_offset;
    let mut bufSize: usize = block_size as usize;

    block_contexts.push(BlockContext {
        output_buffer: &mut buf[bufOffset..(bufOffset+bufSize)],
        block_index: index,
        block_token: token,
        block_size,
    })
}

我可以看到一堆处理静态块大小的API-例如buf.as_chunks_mut(),但最接近我的问题的是buf.align_to(),它在一个元组中返回三个切片,但这只适用于类型,而不是像这样的大块。
是否有任何库或其他方法可以为每个下载线程提供可变切片,或者我需要使用不安全代码来实现这一点?

b09cbbtk

b09cbbtk1#

可以使用chunks_mut()将切片划分为连续的块。

相关问题