io.Reader 接口
03 Oct 2017介绍
io 包指定了 io.Reader 接口, 它表示从数据流的末尾进行读取。 Go 标准库包含了该接口的许多实现, 包括文件、网络连接、压缩和加密等等。 io.Reader 接口有一个 Read 方法:
func (T) Read(b []byte) (n int, err error)`
T 类型的方法 Read 用类型 T 的内部数据填充给定的字节切片 b 并返回填充的字节数和错误值。 在遇到数据流的结尾时,它会返回一个 io.EOF 错误。
示例代码
以下示例代码创建了一个 strings.Reader 并以每次 8 字节的速度读取它的输出。
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello, Reader!")
b := make([]byte, 8)
for {
n, err := r.Read(b)
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
fmt.Printf("b[:n] = %q\n", b[:n])
if err == io.EOF {
break
}
}
}
运行结果
n = 8 err = <nil> b = [72 101 108 108 111 44 32 82]
b[:n] = "Hello, R"
n = 6 err = <nil> b = [101 97 100 101 114 33 32 82]
b[:n] = "eader!"
n = 0 err = EOF b = [101 97 100 101 114 33 32 82]
b[:n] = ""