golang ----------- os,io,bufio对文件的操作

1、内核中的缓冲与进程中的缓冲

内核中的缓冲:无论进程是否提供缓冲,内核都是提供缓冲的,系统对磁盘的读写都会提供一个缓冲(内核高速缓冲),将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才把数据写入磁盘。

进程中的缓冲:是指对输入输出流进行了改进,提供了一个流缓冲,当调用一个函数向磁盘写数据时,先把数据写入缓冲区,当达到某个条件,如流缓冲满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲中,再经块化重写入磁盘。

2、这里的io和bufio是进程中的缓冲。

3、将数据写入文件四种方式:

1)通过os包f.Write([]byte)

var f *os.File
var wireteString = "你好,tcy"
var d1 = []byte(wireteString)
f, err3 := os.Create("./output.txt") //创建文件
n2, err3 := f.Write(d1) //写入文件(字节数组)  os方式

2)通过io包的io.WriteString(f, wireteString)

var wireteString = "你好,tcy"
n, err1 := io.WriteString(f, wireteString) //写入文件(字符串),io方式,n为几个字节
f.Sync()  //Sync递交文件的当前内容进行稳定的存储。一般来说,这表示将文件系统的最近写入的数据在内存中的拷贝刷新到硬盘中稳定保存

3)通过ioutil包的ioutil.WriteFile

var st = []byte(wireteString)
err2 := ioutil.WriteFile("./output.txt", st, 0666) //写入文件(字节数组),如果文件不存在将按给出的权限创建文件,否则在写入数据之前清空文件。

4)通过bufio包中的bufio.NewWriter(f)

var f *os.File
w := bufio.NewWriter(f) //创建新的 Writer 对象,NewReader创建一个具有默认大小缓冲、从r读取的*Reade
n4, err3 := w.WriteString("你好,tcy")
fmt.Printf("写入 %d 个字节n", n4)
w.Flush() //Flush方法将缓冲中的数据写入下层的io.Writer接口。
f.Close()

你可能感兴趣的:(golang ----------- os,io,bufio对文件的操作)