为什么std :: io :: Read中的函数占用缓冲区?

时间:2017-07-04 20:51:48

标签: file io rust

为什么std::io::Read中的方法,即read_to_endread_to_stringread_exact采用缓冲区而不是返回结果?当前返回值是Result<usize>(或Result<()>),但是不能将其转换为元组,也包含结果吗?

1 个答案:

答案 0 :(得分:3)

RFC 517讨论了这些函数,并描述了函数使缓冲区超过返回值的两个原因:

  
      
  • 性能。当知道读取将涉及大量字节时,可以提前预先分配缓冲区。

  •   
  • “原子性”问题。对于read_to_end,即使读取在中间失败,也可以使用此API来保留到目前为止收集的数据。对于read_to_string,情况并非如此,因为在这种情况下无法确保UTF-8的有效性;但是如果需要中间结果,可以使用read_to_end并仅在结尾处转换为String。

  •   

对于第一点,可以使用关联的函数String::with_capacity预分配字符串。向量存在一个非常相似的函数:Vec::with_capacity