我正在组合一组函数,用于从文件中读取数据。在我将读取n字节作为字符串函数之前,一切都很好。这是我目前的尝试:
pub fn read_string<R: Read>(input: &mut R, size: u32) -> io::Result<String> {
let mut buf = vec![0u8; size as usize];
input.read_exact(&mut buf)?;
match str::from_utf8(buf.as_slice()) {
Ok (v) => Ok(v),
Err (e) => ???,
}
}
我为我的match
的Err
臂尝试了一些不同的东西,但运气不好。我曾希望我能从str::from_utf8
返回Result
,但没有成功。如何获取e
中的utf8error
并将其转换为函数的适当返回类型?
好吧,我已经想好了,我需要将Error::new
封装在Err()
中。我在Ok()
上也有一个类型不匹配。这是功能的工作版本:
pub fn read_string<R: Read>(input: &mut R, size: u32) -> io::Result<String> {
let mut buf = vec![0u8; size as usize];
input.read_exact(&mut buf)?;
match String::from_utf8(buf) {
Ok (v) => Ok(v),
Err (e) => Err(io::Error::new(ErrorKind::Other, e))
}
}
编辑以纳入NieDzejkob的建议,供那些可能想要重用此代码的人使用。