我有一个文本文件,其中每一行代表一个JSON对象.我正在使用这样的简单for循环在Go中处理此文件:
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)
}
Run Code Online (Sandbox Code Playgroud)
当此代码到达具有特别大的JSON字符串(~67kb)的行时,我收到错误消息"bufio.Scanner:token too long".
是否有一种简单的方法可以增加可读的最大行数NewScanner?或者是否有另一种方法可以完全采取,当需要读取太大NewScanner但不知道通常不安全的线路?
小智 15
你也可以这样做:
scanner := bufio.NewScanner(file)
buf := make([]byte, 0, 64*1024)
scanner.Buffer(buf, 1024*1024)
for scanner.Scan() {
// do your stuff
}
Run Code Online (Sandbox Code Playgroud)
scanner.Buffer()的第二个参数设置最大令牌大小.在上面的示例中,只要没有任何行大于1MB,您就可以扫描文件.
| 归档时间: |
|
| 查看次数: |
9672 次 |
| 最近记录: |