本文简要介绍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 BufWriter.capacity用法及代码示例
- Rust BufWriter.get_ref用法及代码示例
- Rust BufWriter.get_mut用法及代码示例
- Rust BufWriter.into_inner用法及代码示例
- Rust BufWriter.with_capacity用法及代码示例
- Rust BufWriter.new用法及代码示例
- Rust BufWriter.into_parts用法及代码示例
- Rust BufWriter.buffer用法及代码示例
- Rust BufRead.split用法及代码示例
- Rust BufReader.new用法及代码示例
- Rust BufReader.get_mut用法及代码示例
- Rust BufReader.with_capacity用法及代码示例
- Rust BufRead.fill_buf用法及代码示例
- Rust BufRead.has_data_left用法及代码示例
- Rust BufRead.read_until用法及代码示例
- Rust BufRead.read_line用法及代码示例
- Rust BufReader.capacity用法及代码示例
- Rust BufRead.lines用法及代码示例
- Rust BufReader.buffer用法及代码示例
- Rust BufRead用法及代码示例
- Rust BufReader用法及代码示例
- Rust BufReader.get_ref用法及代码示例
- Rust BufReader.into_inner用法及代码示例
- Rust Builder.stack_size用法及代码示例
- Rust BuildHasher.build_hasher用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::io::BufWriter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。