为了减少默认的 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)
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消