2016-10-04 89 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)