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

我正在使用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)

}

}

回答:

根据文档和相应的源代码,默认情况下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()缓冲区限制? 的全部内容, 来源链接: utcz.com/qa/401721.html

回到顶部