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使…

前端面试理论题

1.什么是js?js的特点是什么? js: 是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的高级语言。 特点:简单性;安全性;动态性;跨平台性; 简单性:它的…

ElasticSearch之Close index API

关闭指定的索引。 索引关闭之后: 停止对读、写操作的响应。停止检索操作的响应。在索引关闭前,允许执行的操作,关闭之后均不允许执行。ElasticSearch取消对索引的相关维护操作,包含内存中的数据结构,以及保存在存储中…

c++--运算符重载

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

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

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

破解研发人员的绩效考核难题

当下的中国正处于产业结构调整的重要转型时期。创新成为当下企业寻求稳健和长远发展必不可少的关键。要建立属于自己的企业特色,开发出属于自己的产品和服务并在激励竞争的市场下求得生存和发展,企业的自主研发活动已经越来越重视。纵观那些世界500强企业…

【Centos】在CentOS上搭建Squid代理服务器详解

在CentOS上搭建Squid代理服务器详解 一、安装 首先,通过yum包管理工具安装Squid代理服务器和httpd-tools(用于生成密码文件): yum install squid -y yum install httpd-tools -y二、生成密码文件 创建用于存储用户认证信息的目…

杨辉三角

打印n行杨辉三角&#xff0c;n<10。 输入格式: 直接输入一个小于10的正整数n。 输出格式: 输出n行杨辉三角&#xff0c;每个数据输出占4列。 输入样例: 5输出样例: 11 11 2 11 3 3 11 4 6 4 1代码长度限制 16 KB 时间限制 400 ms 内存限制 6…

css实现正六边形嵌套圆心

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

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

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

js判断是否是搜索引擎(蜘蛛)、爬虫

/*** description 对象$BP&#xff0c;包含三个方法和一个属性*/var $BP {// 第一&#xff1a;通过ua判断是非爬虫/*** description 判断是否为爬虫* returns {boolean} 返回布尔值&#xff0c;true表示不是爬虫&#xff0c;false表示是爬虫*/isBot() {return /bot|googlebot|…

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

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

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…

求二维数组周边元素的累加和

求一个二维数组周边元素的累加和。 输入一个二维数组的行数m&#xff08;m<10&#xff09;&#xff0c;列数n(n<10)&#xff0c;二维数组的各元素值。输出周边元素之和。 输入格式: 输入的第一行为矩阵的行数和列数&#xff0c;从第二行开始&#xff0c;为矩阵元素的输…

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

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

[C#]文件的读写-1

参考代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text;namespace FileDemo {class Program{static void Main(string[] args){//1.FileStream fFile.Open("cs.bin",FileMode.Create); //如果文件存在…

TA-Lib学习研究笔记(九)——Pattern Recognition (0)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;0&#xff09; 1.Pattern Recognition Functions 形态识别 所有的形态函数&#xff0c;大部分可以在股票软件中找到&#xff0c;通过Python的talib实现形态识别&#xff0c;可以和股票软件…

C语言-字符串输入输出

字符串赋值 char *t “title”;char *s;s t;并没有产生新的字符串&#xff0c;只是让指针s指向了t所指的字符串&#xff0c; 对s的任何操作就是对t做的 字符串输入输出 char string[8];scanf(“%s”, string);printf(“%s”, string);scanf读入一个单词&#xff08;到空格…