bufio

53 阅读2分钟

image.png 结构体Reader的类型在bufio包中已经定义好了,而使用NewReader()就能返回一个Reader结构体的*类型再用值接收,就能用值调用*Reader其他方法了

image.png

image.png

练习1: image.png

image.png

image.png

练习2:chapter14File/

注意Write结构体指针中 在用到WriteString方法时才用Flush方法 image.png

package main

import (
	"bufio"
	"log"
	"os"
)

//最终系统自动创建了文件,并且里面有内容
//在这里输出不了信息,因为在os.OpenFile()第二个参数已经设定好了os.O_WRONLY只能读
//在这里输出不了信息,但可以直接去看文件的变化,自动创建了一个新文件D:/abc.txt,并有内容

func main() {
	filePath := "D:/abc.txt"
	//创建一个新文件D:/abc.txt,写入内容 5句 "hello, Gardon"
	//1 .打开文件 D:/abc.txt
	//返回*File,error
	file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		log.Fatal(err)
		return //直接结束main,不再执行后面代码
	}
	//及时关闭file指针
	defer file.Close()
	//准备写入5句 "hello, Gardon"
	str := "hello,Gardon\r\n" // 有些系统是\r\n 表示换行
	//写入时,使用带缓存的 *Writer
	/*
		go标准库文档中文版
		bufio包中 func NewWriter
		func NewWriter(w io.Writer) *Writer
		NewWriter创建一个具有默认大小缓冲、写入w的*Writer。
	*/
	write := bufio.NewWriter(file)
	for i := 0; i < 5; i++ {
		write.WriteString(str)
		/*
			func (*Writer) WriteString
			func (b *Writer) WriteString(s string) (int, error)
		*/
		//WriteString写一个字符串。
		//不理他,英翻中 它返回的字节数。如果计数小于len (s),这也解释了为什么写短返回一个错误。
	}
	//官网:写任何缓冲的数据刷新到底层io.Writer。
	//因为writer是带缓存,因此在调用WriteString方法时,其实
	//内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
	//真正写入到文件中, 否则文件中会没有数据!!!
	write.Flush()
	/*
		写任何缓冲的数据刷新到底层io.Writer其实就是file,
		func NewWriter(w io.Writer) *Writer
		write := bufio.NewWriter(file)

		func (b *Writer) Flush() error
	*/

}

代码和Reader肯定是差不多的 image.png