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

相关推荐
UIUV14 小时前
Go语言入门到精通学习笔记
后端·go·编程语言
littleschemer18 小时前
Go异步持久化如何防止炸服
go·map并发崩溃
不会敲代码11 天前
从零开始学 Go:协程并发与 Web 开发初探
go
扉页的墨1 天前
Wails v2 实战:用 Go 写桌面应用,从 0 到 1 构建一个本地笔记工具
go
我叫黑大帅1 天前
从零实现一个完整 RAG 系统:基于 Eino 框架的检索增强生成实战
后端·面试·go
不会写DN2 天前
通过eino-ext如何正常indexer RAG?
网络·面试·go
donecoding2 天前
遗嘱、水管与抢救室:TS 切入 Go 的流程控制、接口与并发
javascript·typescript·go
扉页的墨2 天前
Go 协程泄漏排查实战:我是如何把线上内存从 500MB 压到 20MB 的
go
donecoding2 天前
对象模型与内存的“钥匙理论”:TS 切入的 Go 的结构体与指针
javascript·typescript·go
我叫黑大帅2 天前
通过eino-ext如何正常indexer RAG?
后端·面试·go