我在做数据的加密解密的时候,有一个场景需要将一串字符串数据加密写入文本,在后面的场景中又需要读取该文本,在加密过后返回的是一串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)