bufio
包是 Go 语言标准库中的一个包,提供了带缓冲的 I/O 操作,用于提高读写性能。主要的类型包括 Reader
、Writer
和 Scanner
。
1. Reader 类型
bufio.Reader
类型提供了带缓冲的读取功能,常用于从输入源(例如文件、网络连接)中读取数据。它的构造函数是 bufio.NewReader
。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
// 读取一个字节
char, err := reader.ReadByte()
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println("Read byte:", char)
}
2. Writer 类型
bufio.Writer
类型提供了带缓冲的写入功能,用于向输出目标(例如文件、网络连接)写入数据。它的构造函数是 bufio.NewWriter
。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Create("output.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
// 写入字符串
message := "Hello, bufio!"
_, err = writer.WriteString(message)
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
// 刷新缓冲区
err = writer.Flush()
if err != nil {
fmt.Println("Error flushing buffer:", err)
return
}
}
3. Scanner 类型
bufio.Scanner
类型用于逐行扫描输入源,常用于按行读取文件。它的构造函数是 bufio.NewScanner
。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
// 逐行扫描
for scanner.Scan() {
line := scanner.Text()
fmt.Println("Read line:", line)
}
// 检查是否有错误发生
if err := scanner.Err(); err != nil {
fmt.Println("Error reading file:", err)
}
}
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
腾讯云开发者社区:孟斯特