bufio.Reader的peek(n)方法,若在读结束前一刻,未读字节<n,是必然返回ErrBufferFull吗?
1. 运行环境
go1.17
2. 问题描述?
fetch error: bufio: buffer full
func (b *Reader) Peek(n int) ([]byte, error) {
if n < 0 {
return nil, ErrNegativeCount
}
b.lastByte = -1
b.lastRuneSize = -1
for b.w-b.r < n && b.w-b.r < len(b.buf) && b.err == nil {
b.fill() // b.w-b.r < len(b.buf) => buffer is not full
}
if n > len(b.buf) {
}
return b.buf[b.r:b.w], ErrBufferFull
// 0 <= n <= len(b.buf)
var err error
if avail := b.w - b.r; avail < n {
// not enough data in buffer
n = avail
err = b.readErr()
if err == nil {
err = ErrBufferFull
}
}
return b.buf[b.r : b.r+n], err
}
3. 您期望得到的结果?
比如bufio缓冲区最后获取的未读字节为1010,而peek(1024),此时avail := b.w - b.r; avail < n,返回未读字节并返回err。
那么返回err似乎并非真的出错了。
还是我理解错误?求大佬帮忙解释一下,已经搞不清楚了。
这个应该是逻辑问题 你可以去百度搜索一下 err特性