Go语言编程入门超级指南

2020-01-28 12:01:04王冬梅

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)