當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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