⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go bufio包:带缓冲的I/O操作

学习使用bufio包提高I/O性能,包括带缓冲的读写、Scanner和行读取。 · 难度:入门 · +15XP

Go bufio包:带缓冲的I/O操作

bufio包在io包的基础上提供了带缓冲的读写功能,通过减少系统调用次数大幅提升I/O性能。核心类型包括ReaderWriterScanner

1. bufio.Reader

通过bufio.NewReader(rd)创建,默认缓冲区大小为4096字节。常用方法:

方法说明
Read(p []byte)读取数据到切片
ReadByte()读取一个字节
ReadString(delim byte)读取直到遇到分隔符,返回字符串
Peek(n int)查看接下来的n个字节但不移动位置
r := bufio.NewReader(strings.NewReader("Hello, World!"))
line, _ := r.ReadString(',')
fmt.Println(line) // 输出: Hello,

// Peek示例 peeked, _ := r.Peek(6) fmt.Println(string(peeked)) // 输出: World

2. bufio.Writer

通过bufio.NewWriter(w)创建,数据先写入缓冲区,当缓冲区满或调用Flush()时才真正写入底层Writer。

var buf bytes.Buffer
w := bufio.NewWriter(&buf)
w.WriteString("Hello ")
w.WriteString("World!")
w.Flush() // 必须调用,否则数据不会写入buf
fmt.Println(buf.String())

3. bufio.Scanner(推荐)

Scanner是读取行或单词最方便的方式。它内置了缓冲,支持自定义分割函数。

scanner := bufio.NewScanner(strings.NewReader("line1
line2
line3"))
for scanner.Scan() {
    fmt.Println(scanner.Text()) // 逐行输出
}
if err := scanner.Err(); err != nil {
    fmt.Println("Error:", err)
}

4. 练习提示

使用bufio.Scanner读取标准输入,统计单词个数。提示:设置scanner.Split(bufio.ScanWords)来按单词分割。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0