我想从具有已知偏移量和大小的文件中读取UTF-8字符串,
所以我写道:
fn test(file: &mut File, offset: u64, length: usize) -> Result<String, String> {
try!(file.seek(SeekFrom::Start(offset)).map_err(|err| err.to_string()));
let mut buffer = Vec::<u8>::with_capacity(length);
buffer.resize(length, 0_u8);
try!(file.read_exact(& mut buffer).map_err(|err| err.to_string()));
let utf8_s = try!(from_utf8(&buffer).map_err(|err| "invalid utf-8 data in data".to_string()));
Result::Ok(String::from(utf8_s))
}
在我的代码中,我不喜欢两件事:
Vec
,但这没用,因为在下一行我称为
file.read_exact
。我可以在没有堆的情况下分配内存吗初始化吗?
Vec
,最后我通过String
再次分配了内存。我分配了相同数量的内存,并从一个位置复制到另一个位置。是否可以使用length
内存需求而不是2 * length
来实现此功能? 最佳答案
Vec
的唯一方法是使用unsafe
代码。除非您能证明这是程序的实际性能问题,否则请原样保留。 String::from_utf8
来进行就地转换。 关于rust - 如何优化从具有已知偏移量和大小的文件中读取UTF-8字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38161695/