美文网首页
golang bufio 缓冲io

golang bufio 缓冲io

作者: copyLeft | 来源:发表于2019-08-23 09:42 被阅读0次

读取缓冲区 Reader

创建读取对象

  • NewReader 创建默认大小的缓冲区
  • NewReaderSize 创建指定大小的缓冲区
  • Reader.Buffered 获取缓存可读取字节数
  • Reset 丢弃当期缓存数据, 所以丢弃的长度与缓冲区大小相关

if f, err := os.OpenFile("./mock.json", os.O_RDWR, os.ModelAppend); err == nil{
    
    // 创建缓冲区
    buf := bufio.NewReader(f)
    
    // 创建指定大小buff
    // bufCache := bufio.NewReaderSize(f, 50)

       
    // 获取当前缓冲区可读字节数
    fmt.Printf("\n %d \n", bufCache.Buffered())

}

读取缓冲数据




// 需要为 []byte 字节切片开创内存空间
cache := make([]byte, 100)

// 将读取数据存入, 字节切片中. 返回读取数及错误信息
num, _ := bufCache.Read(cache)

fmt.Printf("\n%d: %s", num, string(cache))


f, _ := os.OpenFile("./mock.json", os.O_RDWR, os.ModeAppend)

    bufCache := bufio.NewReaderSize(f, 1)

    //以换行符为断点,读取数据
    var str string
    var buf []byte
    var err error
    for err == nil {

        buf, err = bufCache.ReadBytes('\n')
        fmt.Println("from buff: ", string(buf))

        // 直接读取字符串
        str, err = bufCache.ReadString('\n')
        fmt.Println("from string: ", str)
    }
    
    
// 主要:因为使用的是同一缓冲区, 无论使用哪种读取方法,都将影响下次读取。

写入缓冲区 Writer

新建缓冲区



    
    f, _ := os.OpenFile("./mock.json", os.O_RDWR, os.ModeAppend)
    
    // 创建缓冲区
    writerBuff := bufio.NewWriter(f)

    dataSize := writerBuff.Buffered()
    surplus := writerBuff.Available()
    fmt.Println(dataSize, surplus)

写入数据




// 逐行读取,转为大写
func main() {

    srouce, _ := os.OpenFile("./srouce.json", os.O_RDWR, os.ModeAppend)
    target, _ := os.OpenFile("./target.json", os.O_RDWR, os.ModeAppend)

    readerBuff := bufio.NewReader(srouce)
    writerBuff := bufio.NewWriter(target)

    var num int
    var str string
    var err error

    for err == nil {

        // 逐行读取
        str, err = readerBuff.ReadString('\n')

        fmt.Printf("\n%d %s", num, str)

        num++

        // 逐行写入
        writerBuff.WriteString(strings.ToUpper(str))
        
        // 提交写入
        writerBuff.Flush()

    }



}






// 拷贝文件内容
    srouce, _ := os.OpenFile("./mock.json", os.O_RDWR, os.ModeAppend)
    target, _ := os.OpenFile("./target.json", os.O_RDWR, os.ModeAppend)


    writerBuff := bufio.NewWriter(target)
    
    // 从 io.Reader 直接获取数据
    writerBuff.ReadFrom(srouce)

可读写缓冲区

该缓冲区是 Reader Writer 接口集合对象 { *Reader, *Writer }

Scanner

带处理函数的缓冲区

Scanner 方法


package main
import (
  "bufio"
  "fmt"
  "os"
)
func main() {
    
  // 将标准输入作为数据源
  scanner := bufio.NewScanner(os.Stdin)
  
  // 设置处理函数
  scanner.Split(bufio.ScanLines)
  
  for scanner.Scan()  {
  
    // 以字符串形式输出
    fmt.Println(scanner.Text())
  }
}

bufio 默认 Scanner 处理方法

其他

相关文章

网友评论

      本文标题:golang bufio 缓冲io

      本文链接:https://www.haomeiwen.com/subject/emqzsctx.html