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

     未完待续

  • 相关阅读:
    Tomcat下使用war包发布项目
    shell编程报错:“syntax error near unexpected token `”
    undo表空间不足,ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
    HTML快速入门
    HTTP协议快速入门
    Java Web应用的开发模式
    使用Jekyll搭建免费的Github Pages个人博客
    前端模拟API数据的两种方式
    Node.js学习笔记
    socket.io笔记
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10316218.html
Copyright © 2011-2022 走看看