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

相关推荐
猪猪拆迁队5 小时前
跨电脑复制共享-WebRTC 打洞踩坑
前端·后端·go
小小龙学IT7 小时前
Go 语言 gRPC(grpc-go)深度解析
rpc·架构·golang·go
newerp10 小时前
pprof 火焰图(Flame Graph)阅读与热点代码重构实战
后端·程序员·go
云浪1 天前
Go源码分析:搞懂 Go 是如何实现堆的
后端·go·源码阅读
montEvergreen1 天前
RTMP 里的那根“连接线”:读一份 NetConnection 源码
后端·go
montEvergreen1 天前
RTMP 握手:一场客户端与服务端的“暗号”对决
后端·go
newerp1 天前
sync.Mutex 源码深度拆解:正常模式(自旋)与饥饿模式
后端·程序员·go
montEvergreen1 天前
RTMP 王国的“信笺百科全书”
后端·go
TechLee1 天前
Go 泛型统一 API 响应设计的最佳实践
后端·架构·go
我的div丢了肿么办3 天前
go语言中管道 channel的使用
后端·go