其他分享
首页 > 其他分享> > 记录golang ioutil.WriteFile写入的时候注意的一个点

记录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读取整个文件.
assic码表
使用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)

标签:10,return,ioutil,err,golang,WriteFile,Error,byte,读取
来源: https://blog.csdn.net/weapon_host/article/details/121913545