为什么std::io::Read
中的方法,即read_to_end
,read_to_string
和read_exact
采用缓冲区而不是返回结果?当前返回值是Result<usize>
(或Result<()>
),但是不能将其转换为元组,也包含结果吗?
答案 0 :(得分:3)
RFC 517讨论了这些函数,并描述了函数使缓冲区超过返回值的两个原因:
性能。当知道读取将涉及大量字节时,可以提前预先分配缓冲区。
“原子性”问题。对于read_to_end,即使读取在中间失败,也可以使用此API来保留到目前为止收集的数据。对于read_to_string,情况并非如此,因为在这种情况下无法确保UTF-8的有效性;但是如果需要中间结果,可以使用read_to_end并仅在结尾处转换为String。
对于第一点,可以使用关联的函数String::with_capacity
预分配字符串。向量存在一个非常相似的函数:Vec::with_capacity
。