栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

记录golang ioutil.WriteFile写入的时候注意的一个点

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录golang ioutil.WriteFile写入的时候注意的一个点

我在做数据的加密解密的时候,有一个场景需要将一串字符串数据加密写入文本,在后面的场景中又需要读取该文本,在加密过后返回的是一串byte数组,刚好使用ioutil.WriteFile 的时候需要传入的是一个byte数组,我就使用该方法写入文件,然后读取使用的是bufio.NewReader.
开始的时候用的时候好好的,但是后面测试的数据越来越多的时候,我发现一个很奇怪的问题,对于特定的一串字符串我加密存储后,为什么解密出来无论如何都是错误的,这个问题我始终不得解决,后面我将该串加密后的byte数组打印出来了:

[17 144 10 194 131 10 206 161 10 153 54 38 13 133 38]

接着我再使用bufio.NewReader读取,我就发现问题所在了:

[17 144 194 131 206 161 153 54 38 13 133 38]

读取的byte数组中缺失了’10’这个字节,为什么会这样了,然后我查询了一下assic表,才发现原来’10’这个字节表示的是换行符,也就是说使用bufio.NewReader 读取文件的时候会将表示换行符的’10’给剔除,导致读取的数据和存储的数据不一致,这也表示在存入byte数组数据时需要注意’10’是否是需要的数据,如果是的话,读取的时候选择seek读取或者使用ReadFile读取整个文件.

使用readfile读取文件:

	str, err := ioutil.ReadFile(filepath.Join("", ""))
	if err != nil {
		return "err" + err.Error()
	}

使用seek读取文件:

	f, err := os.OpenFile(mms, os.O_CREATE|os.O_RDONLY, 0666)
	defer f.Close()
	if err != nil {
		return err.Error()
	}
	_, err = f.Seek(0, io.SeekStart)
	if err != nil {
		return err.Error()
	}
	fs, err := f.Stat()
	if err != nil {
		return err.Error()
	}
	a := make([]byte, fs.Size())
	_, err = f.Read(a)
	if err != nil {
		return err.Error()
	}
	return string(a)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号