bufio 包是 Go 语言标准库中的一个包,提供了带缓冲的 I/O 操作,用于提高读写性能。主要的类型包括 ReaderWriterScanner

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)
	}
}

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特