快速扫描大型UTF-8字符串

时间:2013-02-17 18:36:12

标签: performance input go

我有一个大约8000000个UTF-8字符的字符串。通过fmt.Scanf()扫描它需要大约10秒钟,我该怎样才能更快地完成?我有一个由我的老师编写的C scanf()函数的Go包装器,作为Go的fmt.Scanf()中的一些错误的解决方法,它在1-2秒内工作,但我没有&#39 ;喜欢使用side包来完成这么简单的任务。您能否建议一些更快速的方式来阅读纯Go中的字符串?

1 个答案:

答案 0 :(得分:6)

找到解决方案。 bufio工作得更快(因为它是缓冲的,fmt的函数不是,并且它不会解析任何东西):

reader := bufio.NewReader(os.Stdin)
str, _ := reader.ReadString('\n')   // Like fmt.Scanf("%s", &str), but faster
var x, y rune
fmt.Fscanf(reader, "%c %c", &x, &y) // I need to read something else
                                    // (see comments for the question)
                                    // It's easy, as I can use fmt.Fscanf

......比C scanf()包装更快。