使用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()才比较稳妥。

浙公网安备 33010602011771号