当前位置: 首页 > news >正文

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

任意make一个byte切片,进行调试就会发现初始时空余位置都是空字符:

其实这也是正常的,就和你make一个指定大小的int切片,里面默认都是0一样。

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

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

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

http://www.lryc.cn/news/252944.html

相关文章:

  • 【Collection - PriorityQueue源码解析】
  • Javascript_根据截止日期超时自动返回
  • 记录 | vscode设置自动换行
  • k8s引用环境变量
  • navicate16 2059 plugin http could not be loaded
  • dp-基础版动态规划(动态规划每日一题计划)10/50
  • 轻食沙拉店外卖配送小程序商城效果如何
  • Oracle ADRCI工具使用说明
  • Amazon CodeWhisperer 正式可用, 并面向个人开发者免费开放
  • 8-Hive原理与技术
  • cloudflare Tunnel完整
  • 微信聊天窗口测试用例
  • Linux下配置邮箱客户端MUTT,整合msmtp + procmail + fetchmail
  • [每周一更]-(第75期):Go相关粗浅的防破解方案
  • 停留时间是您需要跟踪的 SEO 指标
  • ES常用操作语句
  • MicroPython STM32F4 RTC功能使用介绍
  • 【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现
  • 公有云迁移研究——AWS Route53
  • 浪潮信息KeyarchOS——保卫数字未来的安全防御利器
  • python-单词本|通讯录
  • oracle impdp 导入元数据表空间异常增大的解决办法
  • 网站高可用架构设计基础
  • 基础堆溢出原理与DWORD SHOOT实现
  • ts的一些
  • LORA概述: 大语言模型的低阶适应
  • 关于在PyTorch中使用cudnn.benchmark= True
  • re:Invent大会,亚马逊云科技为用户提供端到端的AI服务
  • 23、什么是卷积的 Feature Map?
  • 安装获取mongodb