晨旭东方网站建设,wordpress 9gag主题,手机网站建设开什么类型的票,网页版微信消息撤回目录
背景
看看修改前
修改后
原因 背景
写文件完成后发现#xff1a; size明显也和正常的不相等。
看看修改前
buf : make([]byte, 64)
buffer : bytes.NewBuffer(buf)// ...其它逻辑使得buffer有值// 打开即将要写入的文件#xff0c;不存在则创建
f, err : os.Open…目录
背景
看看修改前
修改后
原因 背景
写文件完成后发现 size明显也和正常的不相等。
看看修改前
buf : make([]byte, 64)
buffer : bytes.NewBuffer(buf)// ...其它逻辑使得buffer有值// 打开即将要写入的文件不存在则创建
f, err : os.OpenFile(filepath, os.O_CREATE|os.O_TRUNC, 0666)writer : bufio.NewWriter(f)
n, err : io.Copy(writer, buffer)
err writer.Flush()
修改后
主要是前两句替换为
buffer : bytes.NewBuffer([]byte{})
或
buffer : bytes.Buffer{}
下面的代码一样。
原因
每次写的时候设置的长度都是64在某次不足64时byte切片空余位置被填充为空字符至于到底是文件前、文件中、文件末尾等什么地方出现该字符就看每次填充到buf是怎么填充的了。
任意make一个byte切片进行调试就会发现初始时空余位置都是空字符 其实这也是正常的就和你make一个指定大小的int切片里面默认都是0一样。
如果不是用io.Copy比如用的是如下方式进行写操作
_, err writer.Write(bs[:n])
则Write方法尽量写成bs[:n]这里的n是本次要写入的实际长度而不是直接的bs或bs[:]即重点是控制长度否则都可能产生此问题。