为了账号安全,请及时绑定邮箱和手机立即绑定

Scanner.Buffer - 最大值对自定义拆分没有影响?

Scanner.Buffer - 最大值对自定义拆分没有影响?

Go
慕码人2483693 2022-11-28 14:49:58
为了减少默认的 64k 扫描仪缓冲区(对于内存不足的微型计算机),我尝试使用此缓冲区和自定义拆分功能:scanner.Buffer(make([]byte, 5120), 64) scanner.Split(Scan64Bytes)在这里我注意到第二个缓冲区参数“max”没有效果。如果我改为插入例如0、1、5120或bufio.MaxScanTokenSize,我看不出有什么区别。只有第一个参数“buf”有结果。如果容量太小,则扫描不完整,如果容量太大,则 B/op benchmem 值会增加。从文档:最大令牌大小是 max 和 cap(buf) 中的较大者。如果 max <= cap(buf),Scan 将只使用这个缓冲区而不进行分配。我不明白哪个是正确的最大值。你能给我解释一下吗?
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

最大值对自定义拆分没有影响?


不,没有拆分会有相同的结果。但如果没有 split 和 ErrFinalToken,这是不可能的:


//your reader/input

cmdstd := bytes.NewReader(make([]byte, 5120))


// your scanner buffer size

scanner.Buffer(make([]byte, 5120), 64)

来自扫描仪的缓冲区大小应该更大。这就是我设置 buf 和 max 的方式:


scanner.Buffer(make([]byte, 5121), 5120)


查看完整回答
反对 回复 2022-11-28
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信