• go bufio


    1 bufio 读结构

    type Reader struct {
        buf          []byte     // 缓冲区
        rd           io.Reader // reader provided by the client  真正数据来源
        r, w         int          // buf read and write positions   r 待读数据起始位置  w待读数据结束位置  写缓冲区起始位置
        err          error       // 是否出现错误
        lastByte     int        // 读取的最后一个字节 用于单字节读取回退
        lastRuneSize int     // 最后读取一个utf8的大小
    }

    读结构填充方式:

    2 bufio 写结构

    type Writer struct {
        err error
        buf []byte      // 缓冲区
        n   int            // 已填充的大小
        wr  io.Writer
    }

    填充方式:

    func (b *Writer) Write(p []byte) (nn int, err error) {
        for len(p) > b.Available() && b.err == nil {  // 大于可用
            var n int
            if b.Buffered() == 0 {                           // 缓冲区无可写数据 直接写要写数据
                // Large write, empty buffer.
                // Write directly from p to avoid copy.
                n, b.err = b.wr.Write(p)
            } else {
                n = copy(b.buf[b.n:], p)                   // 填满缓冲区,并flush缓冲区
                b.n += n
                b.flush()
            }
            nn += n
            p = p[n:]
        }
        if b.err != nil {
            return nn, b.err
        }
        n := copy(b.buf[b.n:], p)                          // 小于可用,直接copy到缓冲区
        b.n += n
        nn += n
        return nn, nil
    }

  • 相关阅读:
    Silverlight2 开发环境 安装程序顺序
    Java——IO流超详细总结
    【慢慢学Android】:2.SharedPreferences对数据的存储
    【慢慢学算法】:求最大公约数
    【慢慢学算法】:求较大素数 筛选法
    【慢慢学算法】:排名
    手把手教你将vim配置成一个C/C++的超级IDE
    【慢慢学算法】:特殊乘法
    【慢慢学算法】:qsort()与sort的用法(收藏)
    【慢慢学算法】:数字阶梯求和
  • 原文地址:https://www.cnblogs.com/--xiaoyao--/p/4506032.html
Copyright © 2020-2023  润新知