go bytes 定义了一些操作 byte slice 的便利操作
package main
import (
"bytes"
"fmt"
"io"
"os"
)
func handleErr(err error) {
if err != nil {
panic(err)
}
}
func main() {
s := []byte("hello world")
b := bytes.NewReader(s)
fmt.Println("unread size: ", b.Len())
fmt.Println("real size: ", b.Size())
a := make([]byte, 10)
n, err := b.Read(a)
handleErr(err)
fmt.Println("read numbers: ", n)
fmt.Println("a is: ", string(a))
fmt.Println("len after read: ", b.Len())
fmt.Println("size after read: ", b.Size())
f, err := os.OpenFile("./test-file", os.O_WRONLY, os.ModeAppend)
handleErr(err)
defer f.Close()
n1, err := b.WriteTo(f)
handleErr(err)
fmt.Println("write numbers: ", n1)
fmt.Println("len after write: ", b.Len())
fmt.Println("size after write: ", b.Size())
b.Reset([]byte("reset it."))
fmt.Println("new b: ", b.Len(), b.Size())
w, err := b.ReadByte()
handleErr(err)
fmt.Println("ReadByte: ", string(w))
abs, err := b.Seek(1, io.SeekCurrent)
handleErr(err)
fmt.Println("after Seek: ", abs)
fmt.Println("before UnreadByte: ", b.Len())
handleErr(b.UnreadByte())
fmt.Println("after UnreadByte: ", b.Len())
a = make([]byte, 6)
n, err = b.ReadAt(a, 3)
handleErr(err)
fmt.Println("a after ReadAt: ", string(a))
b.Reset([]byte("你好吗"))
r, n , err := b.ReadRune()
handleErr(err)
fmt.Println("readRune: ", string(r), n)
r, n , err = b.ReadRune()
fmt.Println("readRune: ", string(r), n)
handleErr(b.UnreadRune())
r, n , err = b.ReadRune()
fmt.Println("readRune: ", string(r), n)
}