英文:
Is there any benefit to wrapping a bufio.Scanner's reader in a bufio.Reader?
问题
我正在使用bufio.Scanner
,但我不确定是否应该给它一个由bufio.Reader
包装的读取器。
也就是说,当f
是一个os.File
时,我应该使用哪个:
scanner := bufio.NewScanner(f)
还是
scanner := bufio.NewScanner(bufio.NewReader(f))
英文:
I'm using bufio.Scanner
, and I'm not sure if I should be giving it a reader wrapped by bufio.Reader
.
I.e., where f
is an os.File
, should I:
scanner := bufio.NewScanner(f)
or
scanner := bufio.NewScanner(bufio.NewReader(f))
答案1
得分: 3
从scan.go源代码来看,似乎不需要传递*bufio.Reader
给它:它有自己的缓冲区,默认为4K,与bufio.Reader
的缓冲区相同。
// NewScanner返回一个从r读取的新Scanner。
// split函数默认为ScanLines。
func NewScanner(r io.Reader) *Scanner {
return &Scanner{
r: r,
split: ScanLines,
maxTokenSize: MaxScanTokenSize,
buf: make([]byte, 4096), // 可能的起始大小;不需要很大。
}
}
英文:
From the scan.go
source it doesn't look like you need to pass it a *bufio.Reader
: it has its own buffer, defaulting to 4K as bufio.Reader
's buffers do.
// NewScanner returns a new Scanner to read from r.
// The split function defaults to ScanLines.
func NewScanner(r io.Reader) *Scanner {
return &Scanner{
r: r,
split: ScanLines,
maxTokenSize: MaxScanTokenSize,
buf: make([]byte, 4096), // Plausible starting size; needn't be large.
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论