本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。