code: public int peek(int offset) throws IOException {
          if(this.count < 0) {
              return EOF;
          }
  
          if(offset < 0) {
              throw new java.lang.IllegalArgumentException("offset must be >= 0");
          }
  
          /**
           * 实际请求位置
           */
          int i = this.index + offset;
  
          if(i < this.count) {
              return this.buffer[i];
          }
  
          /**
           * �?��读取新数�?         * 先将旧的数据移动到buffer的起始位�?         */
          if(this.index > 0) {
              if(this.count - this.index > 0) {
                  System.arraycopy(this.buffer, this.index, this.buffer, 0, this.count - this.index);
              }
              this.count = this.count - this.index;
              this.index = 0;
          }
  
          /**
           * 如果请求位置超出了buffer容量
           */
          if(offset > this.buffer.length) {
              /**
               * 扩容, 确保容量超过请求位置
               * 新的容量大小是当前bufferSize的�?�?             */
              int bufferSize = (offset / this.buffer.length + 1) * this.buffer.length;
              char[] cbuf = new char[bufferSize];
              System.arraycopy(this.buffer, 0, cbuf, 0, this.count);
              this.buffer = cbuf;
          }
  
          /**
           * 读取新数�?         */
          int length = this.reader.read(this.buffer, this.count, this.buffer.length - this.count);
  
          if(length > 0) {
              this.count = this.count + length;
          }
  
          if(offset < this.count) {
              return this.buffer[offset];
          }
          return EOF;
      }
docs: 获取当前位置以后的数�? offset >= 0
  offset = 0时就是当前位置的数据
  该方法只是预�? 不会改变数据指针
  并且该方法会缓存预读的数�?     * @param offset
  @return int
  @throws IOException