gpt4 book ai didi

Golang - 如何克服 bufio 的 Scan() 缓冲区限制?

转载 作者:IT王子 更新时间:2023-10-29 00:34:14 26 4
gpt4 key购买 nike

我正在使用 bufio 扫描器的 .Scan() 方法来读取文本文件行。然而,当我在文件行中达到一定大小时,扫描仪不再允许我读取,它只返回一个空行。

我应该如何配置缓冲区以接收大量数据?

bigfile.txt 只是一个文件,一行中有许多整数,中间用空格分隔。例如,一行 40000 个整数。 (请注意,它适用于 10000 个或更少整数的文件行,但不适用于 40000 个整数)

234 544 765 45 34 67 67 87 98 43 [... n = 40000 ]

func main() {
readInputFile("bigfile.txt")
}

func readInputFile(name string) {
inFile, _ := os.Open(name)
defer inFile.Close()

scanner := bufio.NewScanner(inFile)

for scanner.Scan() {
line := scanner.Text()
fmt.Printf(line)
}
}

最佳答案

根据 documentation和相应的source code ,默认情况下Scanner使用容量为64K的内部缓冲区。在您的情况下,内部缓冲区不足以存储 40000 个整数。 调用Scan之前设置扫描仪要使用的缓冲区,即

scanner := bufio.NewScanner(inFile)

//adjust the capacity to your need (max characters in line)
const maxCapacity = 512*1024
buf := make([]byte, maxCapacity)
scanner.Buffer(buf, maxCapacity)

关于Golang - 如何克服 bufio 的 Scan() 缓冲区限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39859222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com