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++
}
}
}