我正在使用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)
}
}
Run Code Online (Sandbox Code Playgroud)
put*_*utu 16
根据文档和相应的源代码,默认情况下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)
Run Code Online (Sandbox Code Playgroud)