Reader
类型从一个字符串读取数据,实现了io.Reader
, io.Seeker
等接口。
func NewReader(s string) *Reader
// 通过字符串s
创建一个Reader
func (r *Reader) Len() int
// 返回r
还没有读取部分的长度func (r *Reader) Read(b []byte) (n int, err error)
// 读取部分数据到b
中,读取的长度取决于b
的容量func (r *Reader) ReadByte() (b byte, err error)
// 从r
中读取一字节数据
$GOPATH/src/github.com/ironxu/go_note/library/strings/reader.go
源码如下:
// go 标准库 strings.Reader
package main
import (
"fmt"
"strings"
)
func main() {
s := "hello world"
// 创建 Reader
r := strings.NewReader(s)
fmt.Println(r) // &{hello world 0 -1}
fmt.Println(r.Size()) // 11 获取字符串长度
fmt.Println(r.Len()) // 11 获取未读取长度
// 读取前6个字符
for r.Len() > 5 {
b, err := r.ReadByte() // 读取1 byte
fmt.Println(string(b), err, r.Len(), r.Size())
// h <nil> 10 11
// e <nil> 9 11
// l <nil> 8 11
// l <nil> 7 11
// o <nil> 6 11
// <nil> 5 11
}
// 读取还未被读取字符串中5字符的数据
b_s := make([]byte, 5)
n, err := r.Read(b_s)
fmt.Println(string(b_s), n ,err) // world 5 <nil>
fmt.Println(r.Size()) // 11
fmt.Println(r.Len()) // 0
}