zoukankan      html  css  js  c++  java
  • go标准库的学习-bufio

    参考https://studygolang.com/pkgdoc

    导入方式:

    import "bufio"

    bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。

    bufio包的读写模块提供了针对字节或字符串类型的缓冲机制,因此很适合用于读写UTF-8编码的文本文件

    1. type Reader

    type Reader struct {
        buf          []byte
        rd           io.Reader // reader provided by the client
        r, w         int       // buf read and write positions
        err          error
        lastByte     int // last byte read for UnreadByte; -1 means invalid
        lastRuneSize int // size of last rune read for UnreadRune; -1 means invalid
    }

    1)func NewReader

    func NewReader(s string) *Reader

    NewReader创建一个从s读取数据的Reader。本函数类似bytes.NewBufferString,但是更有效率,且为只读的。

    其他函数和strings标准库中的Reader的函数使用方法相同,可见https://www.cnblogs.com/user-garcia/p/10316221.html

    2)func (*Reader) ReadString

    func (b *Reader) ReadString(delim byte) (line string, err error)

    ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。

    举例:

    package main 
    import(
        "fmt"
        "bufio"
        "strings"
        "io"
        "log"
    )
    func main() {
        reader := bufio.NewReader(strings.NewReader("test bufio's function —— ReadString,
     let's go
    "))
        for{
            line, err := reader.ReadString('
    ')
            if err != nil {
                if err == io.EOF{
                    break
                }
                log.Fatal(err)
            }
            fmt.Print(line)        
        }
    
    }

    返回:

    userdeMBP:src user$ go run test.go
    test bufio's function —— ReadString,
     let's go

    2.type Writer

    type Writer struct {
        err error
        buf []byte
        n   int
        wr  io.Writer
    }

    1)func NewWriter

    func NewWriter(w io.Writer) *Writer

    NewWriter创建一个具有默认大小缓冲、写入w的*Writer。

    2)func (*Writer) Flush

    func (b *Writer) Flush() error

    Flush方法将缓冲中的数据写入下层的io.Writer接口。

    举例:

    package main 
    import(
        "fmt"
        "bufio"
        "os"
    )
    func main() {
        writer := bufio.NewWriter(os.Stdout)
        fmt.Fprintf(writer, "test ")//等价于Printf()
        fmt.Fprintf(writer, "bufio
    ")
        writer.Flush()
    }

    返回:

    userdeMBP:src user$ go run test.go
    test bufio

     未完待续

  • 相关阅读:
    html5-特殊符号的使用
    html5-表格
    html5-列表
    html5-绝对路径/相对路径
    html5-嵌入图片
    html5-超级链接
    html5-常用的文本元素
    html5-了解元素的属性
    Scanner类throwFor(Unknown Source)及跳过下一个扫描器分析
    有关HashMap的一些问题及解答
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10316218.html
Copyright © 2011-2022 走看看