使用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

相关推荐
焗猪扒饭10 小时前
redis stream用作消息队列极速入门
redis·后端·go
梦想很大很大14 小时前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
子玖18 小时前
微信扫码注册登录-基于网站应用
后端·微信·go
Nyarlathotep01131 天前
gin02:gin路径中的参数
后端·go
极客老墨1 天前
Go创造者Rob Pike带你深入理解 Go 字符串:字节、符文与 Unicode 编码
go
程序员爱钓鱼1 天前
Go操作Excel实战详解:github.com/xuri/excelize/v2
前端·后端·go
程序员爱钓鱼2 天前
Go 操作 Windows COM 自动化实战:深入解析 go-ole
后端·go·排序算法
子玖2 天前
实现微信扫码注册登录-基于参数二维码
后端·微信·go
狼爷2 天前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
Nyarlathotep01132 天前
gin01:初探gin的启动
后端·go