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

     未完待续

  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10316218.html
Copyright © 2011-2022 走看看