zoukankan      html  css  js  c++  java
  • 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
    }

  • 相关阅读:
    Android4.2以及最新SDK的尝鲜使用
    UVA 1524
    StringTokenizer类的使用
    Tuxedo入门学习
    ReviewBoard安装和配置札记
    一步一步写算法(之单向链表)
    腾讯2014年实习生招聘笔试面试经历
    二路单调自增子序列模型【acdream 1216】
    [置顶] c# 验证码生成
    Android Service 服务(一)—— Service
  • 原文地址:https://www.cnblogs.com/--xiaoyao--/p/4506032.html
Copyright © 2011-2022 走看看