使用bufio Writer时,手动调用Flush()的必要性

package main

import (
	"bytes"
	"bufio"
	"fmt"
)

func main() {
	buf := &bytes.Buffer{}

	wr := bufio.NewWriter(buf)
	wr.Write([]byte("1234"))

	fmt.Println("buf:", buf.String())
}

  内容没有写到buf:

go run iotest.go
buf:

  添加Flush:

package main

import (
	"bytes"
	"bufio"
	"fmt"
)

func main() {
	buf := &bytes.Buffer{}

	wr := bufio.NewWriter(buf)
	wr.Write([]byte("1234"))
	wr.Flush()

	fmt.Println("buf:", buf.String())
}

  输出:

go run iotest.go
buf: 1234

  查看这块的源码:

 

 可以看到,只有在buffer写满(默认4KB)后,才会主动调Flush()把buffer内容写入底层io。或者写入的数据很大超过buffer长度,会直接写入底层io。

所以,使用bufio Writer时,在适当位置手动调用Flush()才比较稳妥。

 

posted @ 2022-09-28 11:19  _zxq  阅读(230)  评论(0)    收藏  举报