前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >golang bufio 缓冲io

golang bufio 缓冲io

作者头像
copy_left
发布2019-08-23 18:06:49
发布2019-08-23 18:06:49
1.5K00
代码可运行
举报
文章被收录于专栏:方球方球
运行总次数:0
代码可运行

读取缓冲区 Reader

创建读取对象
  • NewReader 创建默认大小的缓冲区
  • NewReaderSize 创建指定大小的缓冲区
  • Reader.Buffered 获取缓存可读取字节数
  • Reset 丢弃当期缓存数据, 所以丢弃的长度与缓冲区大小相关
代码语言:javascript
代码运行次数:0
运行
复制
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())

}
读取缓冲数据
代码语言:javascript
代码运行次数:0
运行
复制
// 需要为 []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

新建缓冲区
代码语言:javascript
代码运行次数:0
运行
复制
    f, _ := os.OpenFile("./mock.json", os.O_RDWR, os.ModeAppend)
    
    // 创建缓冲区
    writerBuff := bufio.NewWriter(f)

    dataSize := writerBuff.Buffered()
    surplus := writerBuff.Available()
    fmt.Println(dataSize, surplus)
写入数据
代码语言:javascript
代码运行次数:0
运行
复制
// 逐行读取,转为大写
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 方法
代码语言:javascript
代码运行次数:0
运行
复制
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 处理方法
其他
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读取缓冲区 Reader
    • 创建读取对象
    • 读取缓冲数据
  • 写入缓冲区 Writer
    • 新建缓冲区
    • 写入数据
  • 可读写缓冲区
  • Scanner
    • Scanner 方法
    • bufio 默认 Scanner 处理方法
    • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档