• 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

     未完待续

  • 相关阅读:
    Ocelot(一)- .Net Core开源网关
    Extensions for Vue
    Vue Study [2]: Vue Router
    Vue Study [1]: Vue Setup
    获取当月的第一天和最后一天示例
    常规正则验证表达式
    当需要向数据库插入空值时,sql语句的判断
    让 IE支持圆角的方法
    服务器上传图片案例
    validatebox相关验证
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10316218.html
Copyright © 2020-2023  润新知