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

相关推荐
gospace17 小时前
【无标题】
go·gb28181·gowvp
我不会起名字32220 小时前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
江湖十年1 天前
Go GOPROXY 兜底链的坑:从一次诡异的 CI lint 失败说起
后端·面试·go
秋风点枝2 天前
gogogo!go语言感悟大观--打卡day01
go·devops
探索云原生2 天前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
右耳朵猫AI2 天前
Go周刊2026W37 | Ebitengine 纯 Go 化、simd 重写 TurboPFor、json/v2 落地
后端·微服务·go
福兮说2 天前
Gin 项目里的错误处理:让 Controller 不必知道错误是怎么来的
后端·go·gin·架构设计
福兮说2 天前
我们那个 IP 限流中间件,跑久了会把内存吃光
go
蛋先生DX2 天前
Java和Go都拍胸脯说"内存我包了",可它们到底是怎么下手的?
java·go·编程语言
Go_error3 天前
上下文取消链:摧毁我们支付系统的 bug
后端·go