• 1.24 Go之数据I/O对象及操作


    1.24 Go之数据I/O对象及操作

    Go语言实现基本I/O操作的包

    Go语言标准库的 bufio 包中,实现了对数据 I/O 接口的缓冲功能

    特点:

    封装于接口 io.ReadWriter、io.Reader 和 io.Writer 中,并对应创建了 ReadWriter、Reader 或 Writer 对象,在提供缓冲的同时实现了一些文本基本 I/O 操作功能。

    Go的数据核心:

    接口是Go语言中所有数据结构的核心。

    对象介绍

    ReadWriter对象

    ReadWriter结构定义:

    package practice_interface

    import "bufio"

    /*
    ReadWriter结构定义
    */
    type ReadWriter struct {
       // Read指针
       *bufio.Reader

       // Writer指针
       *bufio.Writer
    }

    两个指针提供了对数据I/O对象的读写缓冲功能

    创建ReadWriter对象使用函数--->NewReadWriter()指定Read或者Writer创建一个ReadWriter对象,

    ReadWriter 对象将会向底层 io.ReadWriter 接口写入数据,或者从 io.ReadWriter 接口读取数据

    func NewReadWriter(r *bufio.Reader, w *bufio.Writer) *ReadWriter {
       return nil
    }

    创建Reader对象

    创建Reader对象的函数:

    • NewReader()函数

    • NewReaderSize()函数

    NewReader()函数按照缓冲区默认长度创造Reader对象。从底层接口读取尽量多的数据进行缓存。

    func NewReader(rd io.Reader) *Reader

    NewReaderSize()函数可以自定义缓冲区字节长度。

    func NewReaderSize(rd io.Reader, size int) *Reader

    操作Reader对象的方法

    Read()读取数据,并存放到字节切片 p 中。返回已读取的字节数。
    ReadByte() 读取并返回一个字节,如果没有字节可读,则返回错误信息--->修改调用方法即可
    ReadBytes() 读取数据直到遇到第一个分隔符“delim”,并返回读取的字节序列(包括“delim”)。ReadBytes在读到第一个“delim”之前出错,它返回已读取的数据和那个错误
    ReadLine() 读取一行数据,如果一行太长(超过缓冲区长度),参数 isPrefix 会设置为 true 并且只返回前面的数据,剩余的数据会在以后的调用中返回。
    ReadRune() 读取一个 UTF-8 编码的字符,并返回其 Unicode 编码和字节数。如果编码错误,ReadRune 只读取一个字节并返回 unicode.ReplacementChar(U+FFFD) 和长度 1
    ReadSlice() 读取数据直到分隔符“delim”处,并返回读取数据的字节切片,下次读取数据时返回的切片会失效。如果ReadSlice在查找到“delim”之前遇到错误,它返回读取的所有数据和那个错误
    ReadString() 读取数据直到分隔符“delim”第一次出现,并返回一个包含“delim”的字符串。如果 ReadString 在读取到“delim”前遇到错误,它返回已读字符串和那个错误(通常是 io.EOF)。只有当返回的字符串不以“delim”结尾时,ReadString 才返回非空 err
    UnreadByte() 取消已读取的最后一个字节(即把字节重新放回读取缓冲区的前部)。只有最近一次读取的单个字节才能取消读取
    UnreadRune() 取消读取最后一次读取的 Unicode 字符。如果最后一次读取操作不是 ReadRune,UnreadRune 会返回一个错误(在这方面它比 UnreadByte 更严格,因为 UnreadByte 会取消上次任意读操作的最后一个字节)
    Buffered() 返回可从缓冲区读出数据的字节数
    Peek() 读取指定字节数的数据,这些被读取的数据不会从缓冲区中清除。在下次读取之后,本次返回的字节切片会失效。如果 Peek 返回的字节数不足 n 字节,则会同时返回一个错误说明原因,如果 n 比缓冲区要大,则错误为 ErrBufferFull
    Reader()方法

    特点:

    最多只调用底层的 io.Reader 一次,所以返回的 n 可能小于 len(p),当字节流结束时,n 为 0,err 为 io. EOF

    func (b *Reader) Read(p []byte) (n int, err error)

    示例:

    package practice_interface

    import (
       "bufio"
       "bytes"
       "fmt"
    )

    func main() {
       // 声明字节数组
       data := []byte("JunkingBoy")

       // 新建newreader对象
       re := bytes.NewReader(data)

       // 构建readerwriter对象
       r := bufio.NewReader(re)

       //由于read方法返回的是字节切片长度,所以新建字节切片对象
       var buf [128]byte

       // 调用reader对象的read方法
       n, err := r.Read(buf[:])

       fmt.Println(string(buf[:n]), n, err)
    }
    Writer()方法

    方法名和上面的Reader()方法对应,只是对象变味了Writer()对象

  • 相关阅读:
    bzoj3302
    bzoj1264
    听风
    bzoj5073
    bzoj2144
    bzoj1263
    bzoj3653
    Docker 入门 2 镜像基本操作
    Docker 入门 1 准备 Docker 环境
    Docker Hub 镜像加速
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15944254.html
Copyright © 2020-2023  润新知