go写文件后出现大量NUL字符问题记录

目录

背景

看看修改前

修改后

原因


背景

写文件完成后发现:

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是怎么填充的了。

如果不是用io.Copy,比如用的是如下方式进行写操作: 

_, err = writer.Write(bs[:n])

则Write方法尽量写成bs[:n],这里的n是本次要写入的实际长度,而不是直接的bs或bs[:],即重点是控制长度,否则都可能产生此问题。
 

 

你可能感兴趣的:(开发问题解决合集,golang,开发语言,后端)