



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第golangbufio包中Write方法的深入讲解前言
bufio包实现了带缓冲的I/O,它封装了io.Reader和io.Writer对象,然后创建了另外一种对象(Reader或Writer)实现了相同的接口,但是增加了缓冲功能。
首先来看没有缓冲功能的Write(os包中)方法,它会将数据直接写到文件中。
packagemain
import(
"os"
"fmt"
funcmain(){
file,err:=os.OpenFile("a.txt",os.O_CREATE|os.O_RDWR,0666)
iferr!=nil{
fmt.Println(err)
deferfile.Close()
content:=[]byte("helloworld!")
if_,err=file.Write(content);err!=nil{
fmt.Println(err)
fmt.Println("writefilesuccessful")
}
接着看一个错误的使用带缓冲的Write方法例子,当下面的程序执行后是看不到写入的数据的。
packagemain
import(
"os"
"fmt"
"bufio"
funcmain(){
file,err:=os.OpenFile("a.txt",os.O_CREATE|os.O_RDWR,0666)
iferr!=nil{
fmt.Println(err)
deferfile.Close()
content:=[]byte("helloworld!")
newWriter:=bufio.NewWriter(file)
if_,err=newWriter.Write(content);err!=nil{
fmt.Println(err)
fmt.Println("writefilesuccessful")
}
为什么会在文件中看不到写入的数据呢,我们来看看bufio中的Write方法。
func(b*Writer)Write(p[]byte)(nnint,errerror){
forlen(p)b.Available()b.err==nil{
varnint
ifb.Buffered()==0{
n,b.err=b.wr.Write(p)
}else{
n=copy(b.buf[b.n:],p)
b.n+=n
b.Flush()
nn+=n
p=p[n:]
ifb.err!=nil{
returnnn,b.err
n:=copy(b.buf[b.n:],p)
b.n+=n
nn+=n
returnnn,nil
}
Write方法首先会判断写入的数据长度是否大于设置的缓冲长度,如果小于,则会将数据copy到缓冲中;当数据长度大于缓冲长度时,如果数据特别大,则会跳过copy环节,直接写入文件。其他情况依然先会将数据拷贝到缓冲队列中,然后再将缓冲中的数据写入到文件中。
所以上面的错误示例,只要给其添加Flush()方法,将缓存的数据写入到文件中。
packagemain
import(
"os"
"fmt"
"bufio"
funcmain(){
file,err:=os.OpenFile("./a.txt",os.O_CREATE|os.O_RDWR,0666)
iferr!=nil{
fmt.Println(err)
deferfile.Close()
content:=[]byte("helloworld!")
newWriter:=bufio.NewWriterSize(file,1024)
if_,err=newWriter.Write(content);err!=nil{
fmt.Println(err)
iferr=newWriter.Flush();err!=nil{
fmt.Println(err)
fmt.Println("wr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 军用标志管理办法
- 农场场长管理办法
- 农户档案管理办法
- 农村工作管理办法
- 农村浴室管理办法
- 农用产品管理办法
- 农行保安管理办法
- 冰柜分类管理办法
- 准作证管理办法
- 出差用车管理办法
- HXD3C型电力机车检修整备范围及标准
- 二年级上期硬笔书法教案
- 小神仙简谱(音乐资料)
- 风险管理01-风险及风险管理概述
- GB/T 4548-1995玻璃容器内表面耐水侵蚀性能测试方法及分级
- GB/T 20485.33-2018振动与冲击传感器校准方法第33部分:磁灵敏度测试
- GB/T 18403.3-2014气体分析器性能表示第3部分:顺磁氧分析器
- 2023年燕山大学辅导员招聘考试笔试题库及答案解析
- 老年肌肉衰减综合征(肌少症)课件
- 食堂从业人员健康情况晨检记录表
- 《电阻的测量》教学设计 省赛获奖
评论
0/150
提交评论