undo方法:可以将读出的字节再放回到缓冲区,就像什么都没发生一样。
package main
import (
"fmt"
"strings"
"bytes"
"bufio"
)
/**
* Buffered: 0
* Buffered after peek: 7
* ABCDE
* AxCDE
*
* abcdefghijklmnopqrst 20 <nil>
* uvwxyz1234567890 16 <nil>
* 0 EOF
*
* "ABC "
* "DEF "
* "GHI"
*
* "ABC "
* "DEF "
* "GHI"
*
* read unicode=[你], size=[3]
* read unicode=[好], size=[3]
* read(after undo) unicode=[好], size=[3]
*
* Available: 4096
* Buffered: 0
* Available after write: 4088
* Buffered after write: 8
* Buffer after write: ""
* Available after flush: 4096
* Buffered after flush: 0
* Buffer after flush: "ABCDEFGH"
*
* Hello,世界!
*/
func main() {
testPeek()
testRead()
testReadSlice()
testReadBytes()
testReadUnicode()
testWrite()
testWriteByte()
}
func testPeek() {
r := strings.NewReader("ABCDEFG")
br := bufio.NewReader(r)
fmt.Printf("Buffered: %dn", br.Buffered())
p, _ := br.Peek(5)
fmt.Printf("Buffered after peek: %dn", br.Buffered())
fmt.Printf("%sn", p)
p[1] = 'x'
p, _ = br.Peek(5)
fmt.Printf("%sn", p)
}
func testRead() {
r := strings.NewReader("abcdefghijklmnopqrstuvwxyz1234567890")
br := bufio.NewReader(r)
b := make([]byte, 20)
n, err := br.Read(b)
fmt.Printf("%-20s %-2v %vn", b[:n], n, err)
n, err = br.Read(b)
fmt.Printf("%-20s %-2v %vn", b[:n], n, err)
n, err = br.Read(b)
fmt.Printf("%-20s %-2v %vn", b[:n], n, err)
}
func testReadSlice() {
r := strings.NewReader("ABC DEF GHI")
br := bufio.NewReader(r)
w, _ := br.ReadSlice(' ')
fmt.Printf("%qn", w)
w, _ = br.ReadSlice(' ')
fmt.Printf("%qn", w)









