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

go 复制代码
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 复制代码
go run iotest.go
buf:

添加Flush:

css 复制代码
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 复制代码
go run iotest.go
buf: 1234

查看这块的源码:

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

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

【迁移】www.cnblogs.com/zxq89/p/167... posted @ 2022-09-28 11:19

相关推荐
Grassto9 小时前
16 Go Module 常见问题汇总:依赖冲突、版本不生效的原因
golang·go·go module
流浪克拉玛依12 小时前
从超卖到原子性:Redis Lua 解决秒杀库存扣减实战
go
怕浪猫1 天前
第16章:标准库精讲(二)net/http、json、time
后端·go·编程语言
下次一定x1 天前
深度解析Kratos服务注册:从框架入口到Consul落地实现
后端·go
cppgo3 天前
for range的使用注意事项
go
我叫黑大帅3 天前
深入理解Go语言的核心:Type-Value Pair(类型-值对)
后端·面试·go
我叫黑大帅3 天前
深入理解Go语言结构体标签:用途、用法与注意事项
后端·面试·go
lifallen3 天前
CPU 可见性、乱序执行与 Go 内存模型
java·开发语言·数据结构·go