go寫文件后出現(xiàn)大量NUL字符問題解決
背景
寫文件完成后發(fā)現(xiàn):
size明顯也和正常的不相等。
看看修改前
buf := make([]byte, 64) buffer := bytes.NewBuffer(buf) // ...其它邏輯使得buffer有值 // 打開即將要寫入的文件,不存在則創(chuàng)建 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{}
下面的代碼一樣。
原因
每次寫的時(shí)候設(shè)置的長度都是64,在某次不足64時(shí),byte切片空余位置被填充為空字符;至于到底是文件前、文件中、文件末尾等什么地方出現(xiàn)該字符,就看每次填充到buf是怎么填充的了。
如果不是用io.Copy,比如用的是如下方式進(jìn)行寫操作:
_, err = writer.Write(bs[:n])
則Write方法盡量寫成bs[:n],這里的n是本次要寫入的實(shí)際長度,而不是直接的bs或bs[:],即重點(diǎn)是控制長度,否則都可能產(chǎn)生此問題。
到此這篇關(guān)于go寫文件后出現(xiàn)大量NUL字符問題解決的文章就介紹到這了,更多相關(guān)go出現(xiàn)NUL字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
- 解決Django 在ForeignKey中出現(xiàn) non-nullable field錯(cuò)誤的問題
- django 解決自定義序列化返回處理數(shù)據(jù)為null的問題
- django模型類中,null=True,blank=True用法說明
- django數(shù)據(jù)模型中null和blank的區(qū)別說明
- 解決Go語言數(shù)據(jù)庫中null值的問題
- 關(guān)于MongoTemplate通過id查詢?yōu)閚ull的問題
- npm?install編譯時(shí)報(bào)"Cannot?read?properties?of?null?(reading?‘pickAlgorithm‘)"錯(cuò)誤的解決辦法
- npm?ERR!Cannot?read?properties?of?null(reading?'pickAlgorithm')報(bào)錯(cuò)問題解決
- Go json反序列化“null“的問題解決
- 淺析golang如何處理json中的null
- Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問題的解決方案
相關(guān)文章
Golang優(yōu)雅關(guān)閉channel的方法示例
Goroutine和channel是Go在“并發(fā)”方面兩個(gè)核心feature,下面這篇文章主要給大家介紹了關(guān)于Golang如何優(yōu)雅關(guān)閉channel的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考解決,下面來一起看看吧。2017-11-11Golang實(shí)現(xiàn)常見排序算法的示例代碼
現(xiàn)在的面試真的是越來越卷了,算法已經(jīng)成為了面試過程中必不可少的一個(gè)環(huán)節(jié),你如果想進(jìn)稍微好一點(diǎn)的公司,算法是必不可少的一個(gè)環(huán)節(jié)。本文為大家準(zhǔn)備了Golang實(shí)現(xiàn)常見排序算法的示例代碼,需要的可以參考一下2022-05-05Go Mongox輕松實(shí)現(xiàn)MongoDB的時(shí)間字段自動(dòng)填充
這篇文章主要為大家詳細(xì)介紹了Go語言如何使用 mongox 庫,在插入和更新數(shù)據(jù)時(shí)自動(dòng)填充時(shí)間字段,從而提升開發(fā)效率并減少重復(fù)代碼,需要的可以參考下2025-02-02