~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  514 随笔 :: 26 文章 :: 15 评论 :: 62万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

准备在年前写系统源码包的分析,有没人看?^_^

复制代码
// Peek returns the next n bytes without advancing the reader. The bytes stop
// being valid at the next read call. If Peek returns fewer than n bytes, it
// also returns an error explaining why the read is short. The error is
// ErrBufferFull if n is larger than b's buffer size.
//
// Calling Peek prevents a UnreadByte or UnreadRune call from succeeding
// until the next read operation.
func (b *Reader) Peek(n int) ([]byte, error) {
   if n < 0 {
      return nil, ErrNegativeCount
   }
   // peek方法会使得回退操作失效 
   b.lastByte = -1
   b.lastRuneSize = -1
    
// 未读数据长度小于所需长度 n ,且缓冲区未满,那么将缓冲区填满
   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
   }

    // n 大于缓冲区长度,返回所有有效数据 以及 ErrBufferFull error
   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为最大的有效数据长度
      n = avail
      err = b.readErr()
      if err == nil {
         err = ErrBufferFull
      }
   }
   return b.buf[b.r : b.r+n], err
}
复制代码

 

————————————————
版权声明:本文为博客园博主「天涯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
posted on   LuoTian  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2017-08-24 VS2013支持多字节的方法
点击右上角即可分享
微信分享提示