2016-10-04 87 views
1

我正在使用bufio扫描仪的.Scan()方法来读取文本文件行,但是当我在文件行中达到一定的大小时,扫描仪不再允许我读取,它只是返回一个空行。Golang - 如何克服bufio扫描()缓冲区限制?


,我应该如何配置缓冲任何建议采取更大量的数据


的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) 
    } 
} 
+1

你'for'循环后添加一个调用'scanner.Err()',看看它给你。那里可能有用吗? https://golang.org/pkg/bufio/#Scanner.Err – jcbwlkr

回答

5

根据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)