Go bufio:带缓冲的输入输出
学会使用bufio包提高I/O效率,处理带缓冲的读写、行读取和扫描。 · 难度:入门 · +15XP
为什么需要缓冲I/O
直接使用io.Reader每次读取系统调用开销大。bufio包通过内部缓冲区减少系统调用次数,显著提升性能。
bufio.Reader
包装一个io.Reader提供缓冲读取:
r := bufio.NewReader(os.Stdin)
line, err := r.ReadString('
')
fmt.Print("输入: ", line)bufio.Writer
缓冲写入,需要Flush将缓冲区数据真正写入:
w := bufio.NewWriter(os.Stdout)
w.WriteString("Hello, buffered world!
")
w.Flush() // 重要!Scanner 便捷扫描
按行扫描输入:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println("扫描到:", scanner.Text())
}常用方法
| 方法 | 说明 |
|---|---|
| ReadLine | 读取一行(不包含换行符) |
| ReadBytes(delim) | 读取到指定分隔符 |
| Peek(n) | 预览n个字节而不消费 |
| WriteString | 写入字符串 |
| Flush | 刷新缓冲区 |
练习提示
编写一个函数,使用bufio.Scanner从标准输入读取多行,统计每行单词数并输出。注意处理空行和文件结束。