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

相关推荐
用户7438356135114 小时前
无锁 Hub:我的 IM 系统为什么用 channel 而不是 mutex 管理在线用户
go
吴佳浩2 天前
Go史上最大“打脸”现场来了:泛型方法终于实现了
后端·go
明月_清风2 天前
深入 Go 并发编程:从 Goroutine 到 Channel 的系统性避坑指南
后端·go
用户34232323763173 天前
开源!Go+Wails+Vue3 手搓一个 PLC 实时监控桌面工具
go
止语Lab3 天前
为什么你的 Go TCP server P99 延迟这么高
go
Andy Dennis3 天前
nsq学习记录
消息队列·go·nsq
韦胖漫谈IT3 天前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
喵个咪3 天前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
夜悊4 天前
Go网络编程的学习代码示例:客户端/服务端(C/S)模型
go