十七、帶緩衝的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++
      }
   }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章