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

相关推荐
不会写DN14 小时前
Gin 实战入门:从环境搭建到企业级常用特性全解析
go·gin
下次一定x1 天前
深度解析 Kratos 客户端服务发现与负载均衡:从 Dial 入口到 gRPC 全链路落地(下篇)
后端·go
乐茵lin1 天前
大厂都在问:如何解决map的并发安全问题?三种方法让你对答如流
开发语言·go·编程·map·并发安全·底层源码·sync.map
不会写DN2 天前
GORM 实战入门:从环境搭建到企业级常用特性全解析
sql·mysql·go·gin
F1FJJ2 天前
Shield CLI 的 PostgreSQL 插件 v0.5.0 发布:数据库导出 + 协作增强,ER 图全新体验
网络·数据库·docker·postgresql·go
liangbm34 天前
AI-ViewNote:把网课和会议视频自动卷成结构化笔记
ai·typescript·go·软件构建·开源软件·react·桌面软件
我叫黑大帅4 天前
Gin 实战入门:从环境搭建到企业级常用特性全解析
后端·面试·go
我叫黑大帅4 天前
Gin 日志体系详解
后端·面试·go
F1FJJ4 天前
Shield CLI v0.3.3 新增 PostgreSQL 插件:浏览器里管理 PG 数据库
网络·网络协议·docker·postgresql·容器·go
mCell4 天前
【万字长文】从 AI SDK 到 mini-opencode:一次很巧的 Go Agent 架构实践
架构·go·agent