gpt4 book ai didi

go - 当某些行长到足以导致 "bufio.Scanner: token too long"错误时,如何在 Go 中逐行读取文本文件?

转载 作者:IT老高 更新时间:2023-10-28 13:04:30 31 4
gpt4 key购买 nike

我有一个文本文件,其中每一行代表一个 JSON 对象。我在 Go 中使用一个简单的 for 循环处理这个文件,如下所示:

scanner := bufio.NewScanner(file)
for scanner.Scan() {
jsonBytes = scanner.Bytes()
var jsonObject interface{}
err := json.Unmarshal(jsonBytes, &jsonObject)

// do stuff with "jsonObject"...

}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}

当此代码到达包含特别大的 JSON 字符串 (~67kb) 的行时,我收到错误消息“bufio.Scanner: token too long”。

有没有一种简单的方法可以增加 NewScanner 可读的最大行大小?或者,当需要读取对于 NewScanner 来说太大但已知通常不是不安全大小的行时,您是否可以完全采用另一种方法?

最佳答案

你也可以这样做:

scanner := bufio.NewScanner(file)
buf := make([]byte, 0, 64*1024)
scanner.Buffer(buf, 1024*1024)
for scanner.Scan() {
// do your stuff
}

scanner.Buffer() 的第二个参数设置最大 token 大小。在上面的示例中,只要没有任何行大于 1MB,您就可以扫描文件。

关于go - 当某些行长到足以导致 "bufio.Scanner: token too long"错误时,如何在 Go 中逐行读取文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124327/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com