1.func Peek(n int)([]byte,Error){}
//返回一个Reader对象
s := strings.NewReader("hello world")
//对Reader对象进行封装,返回一个带bufio缓冲的Reader对象
br := bufio.NewReader(s)
//返回前5个元素的字节的切片
b, _ := br.Peek(5)
b[0] = 'a'
b, _ = br.Peek(5)
fmt.Println(b)//[97 101 108 108 111]
2.func Read(p []byte)([]byte,Error){}
s := strings.NewReader("123456789")
br := bufio.NewReader(s)
//设置每次从缓存中读取4个字节
b := make([]byte, 4)
//返回实际读取字节数
n, err := br.Read(b)
fmt.Println(string(b[:n]), n, err)//1234 4 <nil>
n, err = br.Read(b)
fmt.Println(string(b[:n]), n, err)//5678 4 <nil>
n, err = br.Read(b)
fmt.Println(string(b[:n]), n, err)//9 1 <nil>
n, err = br.Read(b)
//当缓存无东西可读但硬要读的时候err会返回EOF
fmt.Println(string(b[:n]), n, err) // 0 EOF
3.func Buffered() int{}
s := strings.NewReader("123456789")
br := bufio.NewReader(s)
buf := make([]byte, 4)
br.Read(buf)
fmt.Println(br.Buffered())//5
br.Read(buf)
fmt.Println(br.Buffered())//1
4.func ReadByte()(byte,Error){}
s := strings.NewReader("abcd")
br := bufio.NewReader(s)
tmp, _ := br.ReadByte()
fmt.Println(string(tmp))
5.func UnreadByte()(byte,Error){}
s := strings.NewReader("abc")
br := bufio.NewReader(s)
tmp, _ := br.ReadByte()
fmt.Println(string(tmp))//a
//撤销上面的读取字节操作
br.UnreadByte()
tmp, _ = br.ReadByte()
fmt.Println(string(tmp))//a
6.func ReadRune()([]byte,int,Error){}
s := strings.NewReader("阿萨德")
br := bufio.NewReader(s)
tmp, n, err := br.ReadRune()//读取utf-8编码的字符
fmt.Println(string(tmp), n, err)//阿 3 <nil>
7.func UnreadRune()(){}
s := strings.NewReader("阿萨德")
br := bufio.NewReader(s)
tmp, n, err := br.ReadRune()
fmt.Println(string(tmp), n, err) //阿 3 <nil>
br.UnreadRune()//撤销读取utf-8编码的字符
tmp, n, err = br.ReadRune()
fmt.Println(string(tmp), n, err)
8.func ReadLine()([]byte,bool,Error){}
s := strings.NewReader("123\nzzz")
br := bufio.NewReader(s)
line, _, _ := br.ReadLine()//遇到空格就停止读取
fmt.Println(string(line))//123
br2 := bufio.NewReader(os.Stdin)//可以结合os包中的Stdin方法获取不跳过空格的字符串
line2, _, _ := br2.ReadLine()
fmt.Println(string(line2))
9.func ReadSlice(byte)([]byte,bool,Error){}
func ReadBytes(byte)([]byte,bool,Error){}与ReadSlice功能相同
s := strings.NewReader("ABC DEF GHI")
br := bufio.NewReader(s)
//在 缓存 中查找 空格 并返回 空格 及其之前的所有数据
w, err := br.ReadSlice(' ')
if err != nil {
panic(err)
}
fmt.Println(string(w)) // "ABC "
10.func ReadString(byte)(string,Error){}
s := strings.NewReader("你好,我是卡牌")
br := bufio.NewReader(s)
line, err := br.ReadString(',')
if err != nil {
panic(err)
}
fmt.Println(line) // 你好,
11.func WriteString(string)(){}
//创建一个0字节的缓存
b := bytes.NewBuffer(make([]byte, 0))
//创建一个缓存Writer对象
bw := bufio.NewWriter(b)
//Available()返回缓冲中还有多少字节未使用,Buffered()返回缓冲中已使用的字节数
fmt.Println(bw.Available(), bw.Buffered()) // 4096 0
//向缓存写入字符串
bw.WriteString("card")
fmt.Println(bw.Available(), bw.Buffered()) // 4092 4
bw.Flush()
fmt.Printf("%s\n", b)// "card"
//丢弃缓冲中的数据
bw.Reset(b)
fmt.Println(bw.Available(), bw.Buffered()) // 4096 0
12.func Write([]byte)(){}
p := [...]byte{'a', 'b', 'c'}
b := bytes.NewBuffer(make([]byte, 0))
bw := bufio.NewWriter(b)
//向缓存写入字节数组
bw.Write(p[:])
// Flush 将缓存中的数据提交到底层的 io.Writer 中
bw.Flush()
fmt.Printf("%q\n", b)
13.func WriteByte(byte)(){}
b := bytes.NewBuffer(make([]byte, 0))
bw := bufio.NewWriter(b)
// WriteByte写入单个字节
bw.WriteByte('c')
bw.Flush()
fmt.Println(b)
14.func WriteRune(byte)(){}
b := bytes.NewBuffer(make([]byte, 0))
bw := bufio.NewWriter(b)
//写入一个utf-8编码字符串
size, err := bw.WriteRune('周')
if err != nil {
panic(err)
}
//返回写入的字节数
fmt.Println(size) // 3
bw.Flush()
fmt.Println(b) // 周
15.func ReadFrom(*Reader)(){}
b := bytes.NewBuffer(make([]byte, 0))
s := strings.NewReader("hello world")
bw := bufio.NewWriter(b)
//从io.reader中读取数据并写入到io.writer,无需flush
bw.ReadFrom(s)
fmt.Println(b)
16.func NewReadWriter(*Reader,*Writer)(){}
b := bytes.NewBuffer(make([]byte, 0))
bw := bufio.NewWriter(b)
s := strings.NewReader("hello world")
br := bufio.NewReader(s)
// NewReadWriter 生成bufio.ReadWriter对象,既可以对缓存进行读操作,也可以对缓存进行写操作
rw := bufio.NewReadWriter(br, bw)
word, err := rw.ReadString(' ')
if err != nil {
panic(err)
}
fmt.Printf("%s%d\n", word, len(word)) // hello
_, err = rw.WriteString(",I'm coming")
if err != nil {
panic(err)
}
rw.Flush()
fmt.Println(b)