我正在学习如何在 Go 中有效地读取非常大的文件。我已经尝试过bufio.NewScanner并bufio.NewReader使用ReadString('\n'). 在这两个选项中,NewScanner似乎始终更快(2:1)。
因为NewScanner我发现逐行读取文件比运行 unix cat 命令读取文件需要更多时间。
我测量了运行这段代码需要多长时间:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("test")
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
当您与常规 unixcat输出进行比较时,我得到以下结果:
$ time ./parser3 > /dev/null
19.13 real 13.81 user 5.94 sys
$ time cat test > /dev/null
0.83 real 0.08 user 0.74 sys
几次执行之间的时间差是一致的。
我知道扫描'\n'会增加开销,而不是像 cat 那样将数据从输入复制到输出。
但是看到和这段代码片段之间的区别,cat我问自己这是否是在 Go 中逐行读取文件的最有效方法。
慕森王
30秒到达战场
弑天下
随时随地看视频慕课网APP
相关分类