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似乎并非真的出错了。
还是我理解错误?求大佬帮忙解释一下,已经搞不清楚了。

讨论数量: 1

这个应该是逻辑问题 你可以去百度搜索一下 err特性

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!