十七、带缓冲的IO

1.简介

bufio 包提供缓冲流的功能
a) 常用结构体
⚫ Reader
常用函数
➢ NewReader:创建缓冲输入流
常用方法
➢ Read:读取数据到切片中
➢ ReadLine:读取一行内容到字节切片中
➢ ReadSlice:根据分隔符读取数据到字节切片
➢ ReadString:根据分隔符读取数据到字符串
➢ Reset:重设缓冲流
➢ WriteTo:将数据写入到输出流
⚫Scanner
常用函数
➢ NewScanner:创建扫描对象
常用方法
➢ Scan:扫描数据
➢ Split:定义流分割函数,默认空格
➢ Text:读取数据
➢ Err:获取错误
⚫ Writer
常用函数
➢ NewWriter:创建缓冲输出流
常用方法
➢ Write:将字节切片内容写入
➢ WriteString:将字符串写入
➢ Reset:重置输出流
➢ Flush: 刷新数据到输出流

2.Reader

package main

import (
   "bufio"
   "fmt"
   "io"
   "os"
)

func main() {
   file,err := os.Open("user3.txt")
   if err == nil {
      defer file.Close()
      reader := bufio.NewReader(file)
      bytes := make([]byte,5)
      for {
         n,err := reader.Read(bytes)
         if err != nil {
            if err != io.EOF {
               fmt.Println(err)
            }
            break
         }else {
            fmt.Println(n,err,string(bytes))
         }
      }
   }
}
package main

import (
   "bufio"
   "fmt"
   "io"
   "os"
)

func main() {
   file,err := os.Open("user3.txt")
   if err ==nil {
      defer file.Close()
      reader := bufio.NewReader(file)
      for {
         //如果是换行\n 就截断
         line,isPrefix,err := reader.ReadLine()
         if err != nil{
         if err != io.EOF {
            fmt.Println(err)
         }
         break
      }else {
            fmt.Println(isPrefix,err,string(line))
         }
      }
   }
}
package main

import (
   "bufio"
   "fmt"
   "io"
   "os"
)

func main() {
   file,err := os.Open("user3.txt")
   if err ==nil {
      defer file.Close()
      reader := bufio.NewReader(file)
      for {
         //如果是换行\n 就截断
         line,err := reader.ReadSlice('\n')
         if err != nil{
         if err != io.EOF {
            fmt.Println(err)
         }
         break
      }else {
            fmt.Println(err,string(line))
         }
      }
   }
}

3.Writer

package main

import (
   "bufio"
   "os"
)

func main() {
   file,err := os.Create("user4.txt")
   //创建带缓冲的性能会比较高
   if err == nil{
      //写在缓存中
      defer file.Close()
      writer :=  bufio.NewWriter(file)
      writer.WriteString("ccc")
      writer.Write([]byte("bbbccc"))
      //flush清空缓存 就保存在文件中了
      writer.Flush()
   }
}

4.Scanaer

package main

import (
   "bufio"
   "fmt"
   "os"
)

func main() {
   file,err := os.Open("user2.txt")
   if err == nil{
      defer file.Close()
      i := 0
      scanner  := bufio.NewScanner(file)
      for scanner.Scan(){
         fmt.Println(i,scanner.Text())
         i++
      }
   }
}
package main

import (
   "bufio"
   "fmt"
   "os"
)

func main() {
   file,err := os.Open("user2.txt")
   if err == nil{
      defer file.Close()
      i := 0
      scanner  := bufio.NewScanner(file)
      for scanner.Scan(){
         fmt.Println(i,scanner.Text())
         i++
      }
   }
}
发布了112 篇原创文章 · 获赞 12 · 访问量 6677

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104963116