将切片的末尾复制到其开头

时间:2014-12-07 19:16:53

标签: rust

作为Rust的新手,我正在努力在生锈方式中实现一个简单的问题。我想通过读取N个字节的块(片)来处理每个utf-8字符的文件/管道(没有除读取缓冲区之外的其他内存分配)。

一旦我处理了我读过的一个块的所有字符,如果最后一个utf-8字符跨越两个块边界,则可能会剩下几个字节。如果想在切片的开头复制这些字节(所以我可以通过读取完成我的缓冲区),但借用检查器会妨碍。

在伪代码中:

file.read(buffer);
let mut remaining = buffer.slice_to(…);
while remaining.is_empty() == false {
   if no_char { break; }
   // here, process first char
   remaining = remaining.slice_from(char_len);
}
// here, copy "remaining" at the beginning of "buffer"

借用检查器的问题是"缓冲区"在"剩余"仍然在范围内。我不能做一个" copy_memory"在他们身上。

我知道我可以更改算法,因此我不会使用切片,而是访问"缓冲区"所有时间都使用方括号运算符。我还可以存储"剩余"的最后一个长度,以及剩余的"剩余的"超出范围我可以手动复制字节。但是我喜欢切片的概念(就像我在C ++中可以使用一对迭代器来引用集合中的范围一样),我想知道是否有一种安全且生锈的方法。

PS:我意识到使用" .chars()"在缓冲文件上比使用" lines()"慢和#34; chars()"。所以我想知道读取固定大小的块有多快。

修改:在上面的代码段中用clone替换了slice_to

0 个答案:

没有答案