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