Stdin::lock(&self)の役割
Stdinの問題
標準入力ストリーム処理を行うためのハンドル。 各ハンドルはグローバルバッファを共有参照する。
そのため1バイト読み込むごとに排他制御が作用し、遅くなる。
Note: ハンドル (handle)
ストリームとは流れを意味する。 stdinは、この流れを制御するハンドルと考えられる。
Stdin::lock(&self)の役割
StdinLock<'_>
インスタンスを生成し、共有参照しているグローバルバッファーをロックする。
これによってバッファリングして読み出す事ができる。
pub fn lock(&self) -> StdinLock<'_>ⓘ
use std::io::{self, Read}; fn main() -> io::Result<()> { let mut buffer = String::new(); let stdin = io::stdin(); // Stdinを生成する let mut handle = stdin.lock(); // StdinLock<'_>を生成する handle.read_to_string(&mut buffer)?; // 排他制御しない }
BufReadトレイト
行毎の読み込みや、特定のbyte[u8]
までの読み込みなどが行える。
- lines
- read_line
- read_until
- split
実装されている型
- StdinLock<'_>
- BufReader<R> where R: Read
- &'_ [u8]