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[:],即重点是控制长度,否则都可能产生此问题。
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较慢&…

Mysql分布式集群部署---MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上

1.1 目的 部署MysqlCluster集群环境 1.2 MySQL集群Cluster原理 1 数据分片 MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上。这样可以将数据负载分散到多个服务器上,提高系统的性能和可扩展性。 2. 数据同步 MySQL集群Cluster使…

c++--运算符重载

1.重载的运算符 (1).重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。 (2).除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。 (3).对一个重载的运算符,其优先级和结合律与对应的内置运算符保持一致。 (4).当一个…

2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序

2022年全国大学生数据分析大赛 医药电商销售数据分析 原题再现: 问题背景   20 世纪 90 年代是电子数据交换时代,中国电子商务开始起步并初见雏形,随后 Web 技术爆炸式成长使电子商务处于蓬勃发展阶段,目前互联网信息碎片化以…

css实现正六边形嵌套圆心

要实现一个正六边形嵌套圆心,可以使用CSS的::before和::after伪元素以及border-radius属性。以下是具体的解析和代码: 使用::before和::after伪元素创建正六边形。设置正六边形的背景色。使用border-radius属性使正六边形的内角为60度。在正六边形内部创…

【matlab程序】matlab画子图的多种样式

【matlab程序】matlab画子图的多种样式

【漏洞复现】速达软件存在任意文件上传

漏洞描述 速达软件全系产品存在任意文件上传漏洞,未经身份认证的攻击者可以通过此漏洞上传恶意后门文件,执行任意指令,造成服务器失陷 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

flask之邮件发送

一、安装Flask-Mail扩展 pip install Flask-Mail二、配置Flask-Mail 格式&#xff1a;app.config[参数]值 三、实现方法 3.1、Mail类 常用类方法 3.2、Message类&#xff0c;它封装了一封电子邮件。构造函数参数如下&#xff1a; flask-mail.Message(subject, recipient…

【产品经理】业务问题的诊断:由简入繁,渐进成长

产品的价值在于解决了用户的问题。业务问题的诊断&#xff0c;发现用户的真实问题&#xff0c;拨云见日。 产品的价值在于解决了一定范围的问题&#xff0c;让整体的业务运转、参与角色都能收到因为产品的贡献而产生的价值或便利。微信解决了熟人之间的沟通问题&#xff0c;支付…

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 &#x1f4c2; System ├── &#x1f4c2; Plugin │ ├── &#x1f4c4; file-loader | 在处…

idea连接mysql详细讲解

IDEA连接mysql又报错&#xff01;Server returns invalid timezone. Go to Advanced tab and set serverTimezone prope 前进的道路充满荆棘。 错误界面 IDEA连接mysql&#xff0c;地址&#xff0c;用户名&#xff0c;密码&#xff0c;数据库名&#xff0c;全都配置好了&…

Mybatis异常org.apache.ibatis.binding.BindingException: Parameter “xxx“ not found

问题1: 可能是 mybatis 的xml&#xff0c;对应的mapper接口缺少Param注解&#xff0c;或者Param注解的value与xml的不一致 切记只要参数不是一个集合类型向下图或者多个参数值就要加Param注解 问题2: mybatis的xml&#xff0c;存在多余的注释。注释中包含#{}、${}。注释掉的代…

行云海CMS SQL注入漏洞复现

0x01 产品简介 行云海cms是完全开源的一套CMS内容管理系统,简洁,易用,安全,稳定,免费。 0x02 漏洞概述 行云海cms中ThinkPHP在处理order by排序时可利用key构造SQL语句进行注入,LtController.class.php中发现传入了orderby未进行过滤导致sql注入。攻击者除了可以利用 SQL 注入…

数字艺术语言processing初步

文章目录 示例程序刷新逻辑二维对象 Processing是专门用于艺术设计的编程语言&#xff0c;可以实现非常炫酷的图形和功能&#xff0c;比如下面这张联合国用的图就是用Processing编写的&#xff0c;本文简要介绍以下Processing&#xff0c;并列出其二维对象。 示例程序 第一步&…

删除PPT文件的备注内容

解决方案的工作经常汇报以及经常做ppt的回报工作&#xff0c;但是删除备注很痛苦。 在网上或者拿历史的ppt文件修改后&#xff0c;需要删除ppt备注内容以及删除ppt个人文件信息的办法&#xff1a; 现象&#xff1a;很多备注信息&#xff0c;需要删除 解决办法一、 文件--信息-…

Linux Docker 图形化工具 Portainer远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 结束语 前言 Portainer是一个轻量级的容器管理工具&#xff0c;可以通过Web界面对Docker容器进行管理和监控。它提供了…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

ffmpeg编译支持AVS3编解码

libuavs3d ffmpeg的官方源码中已经支持了libuavs3d解码器的接口&#xff08;libavcodec/libuavs3d.c中定义&#xff09;&#xff0c;因此如果需要编译ffmpeg支持libuavs3d解码器&#xff0c;只需要安装libuavs3d.so以及开启ffmpeg的编译选项即可。 安装libuavs3d解码器 #代码仓…

小程序开发

1.准备工作 1.注册公众平台账号&#xff08;免费&#xff09;2.下载小程序开发工具&#xff08;免费&#xff09; 2.开发步骤 1.第一个小程序 1.小程序的AppID相当于小程序平台的一个身份证&#xff0c;这里使用的是测试号&#xff08;注意区别于服务号或订阅号的AppID&#xf…