将bufio.Scanner的reader包装在bufio.Reader中是否有任何好处?

huangapple go评论76阅读模式
英文:

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.
    }
}

huangapple
  • 本文由 发表于 2014年12月2日 13:53:51
  • 转载请务必保留本文链接:https://go.coder-hub.com/27242774.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定