[Golang]为什么bufio读者改变字符串阅读器?

时间:2015-12-24 13:42:09

标签: go

代码如下==

s := strings.NewReader("ABCDEFGJHIJK")
fmt.Printf("pa is %d\n ", s.GetValueI()) //GetValueI() returns the value of r.i

br := bufio.NewReader(s)
fmt.Printf("papa is %d\n ", s.GetValueI())

cc, _ := br.ReadByte()
fmt.Printf("%c\n", cc)
fmt.Printf("papapa is %d\n ", s.GetValueI())

印刷品显示: pa是0 爸爸是0 一个 papapa是12

所以我们的结果...... 当bufio调用ReadByte()时为什么papapa是12? 这真让我很困惑..

1 个答案:

答案 0 :(得分:2)

缓冲读卡器的目的是更有效地读取数据流,无论读取的读取大小是多少。

当你调用ReadByte时,如果内部缓冲区为空,它会调用其内部fill()方法来重新填充缓冲区,在这种情况下,它会占用整个strings.Reader。然后从该内部缓冲区返回单个字节。