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

为了减少默认的 64k 扫描仪缓冲区(对于内存不足的微型计算机),我尝试使用此缓冲区和自定义拆分功能:

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

在这里我注意到第二个缓冲区参数“max”没有效果。如果我改为插入例如015120bufio.MaxScanTokenSize,我看不出有什么区别。只有第一个参数“buf”有结果。如果容量太小,则扫描不完整,如果容量太大,则 B/op benchmem 值会增加。

从文档:

最大令牌大小是 max 和 cap(buf) 中的较大者。如果 max <= cap(buf),Scan 将只使用这个缓冲区而不进行分配。

我不明白哪个是正确的最大值。你能给我解释一下吗?


慕码人2483693
浏览 76回答 1
1回答

茅侃侃

最大值对自定义拆分没有影响?不,没有拆分会有相同的结果。但如果没有 split 和 ErrFinalToken,这是不可能的://your reader/inputcmdstd := bytes.NewReader(make([]byte, 5120))// your scanner buffer sizescanner.Buffer(make([]byte, 5120), 64)来自扫描仪的缓冲区大小应该更大。这就是我设置 buf 和 max 的方式:scanner.Buffer(make([]byte, 5121), 5120)
打开App,查看更多内容
随时随地看视频慕课网APP