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)
}
// 主要:因为使用的是同一缓冲区, 无论使用哪种读取方法,都将影响下次读取。
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 }
带处理函数的缓冲区
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 将标准输入作为数据源
scanner := bufio.NewScanner(os.Stdin)
// 设置处理函数
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
// 以字符串形式输出
fmt.Println(scanner.Text())
}
}