Go bufio包

bufio包:

带缓冲的I/O操作,

减少系统调用次数,

读取文件、网络数据。

bufio包

是什么

bufio 包是 Go 标准库中的一个非常有用的包,用于提供带缓冲的 I/O 操作。它通过缓冲来提高读取和写入的效率,可以有效减少系统调用的次数,特别是在频繁进行小块数据读写时显得尤为重要。

主要功能

  • 读取 :提供了 Reader,可以从一个底层的 io.Reader 读取数据。
  • 写入 :提供了 Writer,可以向一个底层的 io.Writer 写入数据。
  • 扫描 :提供了 Scanner,可以逐行或逐词读取输入。

重要方法

bufio.Reader 的重要方法

  • Read(p []byte) (n int, err error): 从缓冲区读取数据到 p
  • ReadString(delim byte) (line string, err error): 读取直到遇到指定的分隔符,并返回字符串。
  • ReadBytes(delim byte) (line []byte, err error): 读取直到遇到指定的分隔符,并返回字节切片。

bufio.Writer 的重要方法

  • Write(p []byte) (n int, err error): 将 p 中的数据写入缓冲区。
  • WriteString(s string) (n int, err error): 将字符串 s 写入缓冲区。
  • Flush() error: 将缓冲区中的所有数据写入底层 io.Writer

bufio.Scanner 的重要方法

  • Scan() bool: 扫描输入的下一部分(默认按行扫描)。
  • Text() string: 返回最近一次 Scan() 调用生成的文本。
  • Bytes() []byte: 返回最近一次 Scan() 调用生成的字节切片。
  • Err() error: 如果 Scan() 期间发生错误,返回该错误。

使用场景

  • 文件读取:需要逐行或逐块读取文件内容。
  • 网络 I/O:在网络编程中,通过缓冲 I/O 提高效率。
  • 日志处理:读取和处理日志文件。
  • 大数据处理:逐行读取大数据文件进行处理。

总结

bufio 包通过提供缓冲读写操作,大大提高了 I/O 操作的效率。无论是读取文件、网络数据,还是处理大数据文件,bufio 都是一个非常有用的工具。熟练掌握 bufio 包,可以显著提升 Go 程序的性能和可靠性。

bufio.Reader

bufio.Reader 通过缓冲从底层 io.Reader 读取数据,可以有效减少读取操作的系统调用次数。

Go 复制代码
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	data := "Hello, World!\nWelcome to Go programming.\n"
	reader := bufio.NewReader(strings.NewReader(data))

	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			break
		}
		fmt.Print(line)
	}
}

bufio.Writer

bufio.Writer 通过缓冲向底层 io.Writer 写入数据,可以有效减少写入操作的系统调用次数。

Go 复制代码
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	file, err := os.Create("example.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	writer := bufio.NewWriter(file)
	_, err = writer.WriteString("Hello, World!\n")
	if err != nil {
		fmt.Println(err)
		return
	}
	writer.Flush() // 确保所有缓冲数据都写入底层io.Writer
}

bufio.Scanner

bufio.Scanner 用于逐行或逐词读取数据,通常用于读取较大的输入并进行逐行处理。

Go 复制代码
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	data := "Hello, World!\nWelcome to Go programming.\n"
	scanner := bufio.NewScanner(strings.NewReader(data))

	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println(err)
	}
}
相关推荐
加油,旭杏27 分钟前
【go语言】函数
开发语言·后端·golang
沈韶珺4 小时前
Elixir语言的安全开发
开发语言·后端·golang
加油,旭杏8 小时前
【go语言】grpc 快速入门
开发语言·后端·golang
沈韶珺9 小时前
Visual Basic语言的云计算
开发语言·后端·golang
沈韶珺9 小时前
Perl语言的函数实现
开发语言·后端·golang
慕璃嫣11 小时前
Haskell语言的多线程编程
开发语言·后端·golang
加油,旭杏1 天前
【go语言】接口
开发语言·后端·golang
清北_1 天前
万科000002
golang
兮动人1 天前
Golang 执行流程分析
开发语言·后端·golang·golang 执行流程分析