当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust BufWriter用法及代码示例


本文简要介绍rust语言中 Struct std::io::BufWriter 的用法。

用法

pub struct BufWriter<W: Write> { /* fields omitted */ }

包装一个作家并缓冲它的输出。

直接使用实现 Write 的东西可能效率非常低。例如,每次调用 TcpStream 上的 write 都会导致系统调用。 BufWriter<W> 保留内存中的数据缓冲区,并将其大批量、不频繁地写入底层写入器。

BufWriter<W>可以提高程序的速度小的重复对同一文件或网络套接字的写入调用。当一次写入大量数据或只写入一次或几次时,它没有帮助。当写入内存中的目的地(例如Vec<u8>.

在删除BufWriter<W> 之前调用 flush 至关重要。尽管 drop 会尝试刷新缓冲区的内容,但在 drop 过程中发生的任何错误都将被忽略。调用 flush 可确保缓冲区为空,因此删除甚至不会尝试文件操作。

例子

让我们将数字 1 到 10 写入 TcpStream

use std::io::prelude::*;
use std::net::TcpStream;

let mut stream = TcpStream::connect("127.0.0.1:34254").unwrap();

for i in 0..10 {
    stream.write(&[i+1]).unwrap();
}

因为我们没有缓冲,我们依次写入每一个,每写入一个字节都会产生系统调用的开销。我们可以用 BufWriter<W> 解决这个问题:

use std::io::prelude::*;
use std::io::BufWriter;
use std::net::TcpStream;

let mut stream = BufWriter::new(TcpStream::connect("127.0.0.1:34254").unwrap());

for i in 0..10 {
    stream.write(&[i+1]).unwrap();
}
stream.flush().unwrap();

通过用 BufWriter<W> 包装流,这十个写入都由缓冲区分组在一起,并且在刷新 stream 时都将在一个系统调用中写出。

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::io::BufWriter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。