嘿伙计们,我在玩一些缓冲区,我只是写了一些代码来了解 Read() 是如何工作的
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
tmp := make([]byte, 2)
data := []byte("HEL")
dataReader := bytes.NewReader(data)
dest := make([]byte, len(data))
for {
n, err := dataReader.Read(tmp)
fmt.Println(n)
fmt.Println(string(tmp))
dest = append(dest, tmp[:]...)
if err == io.EOF {
break
}
}
fmt.Println(string(dest))
}
output:
2 -> n
HE -> tmp[:]
1 -> n
LE -> tmp[:]
0 -> n
LE -> tmp[:]
HELELE -> dest
所以我知道输出是错误的,我实际上应该temp[:n]写字节,但是看着输出我意识到 tmp 缓冲区在每次迭代时都不会被清除,当 n 为 1 时也不应该缓冲区的内容是 EL,我的意思是 L 被添加到未附加的 tmp 之前。我看了看读取功能,但无法理解。谁能给我解释一下。