Base64编码与解码原理和使用及复杂数据的存储
来源:互联网 发布:js用cookie统计uv 编辑:程序博客网 时间:2024/06/06 05:07
Base64是网络上最常用的传输8bit字节数据的编码方式之一,是一种简单的加密方式,实际中使用的加密比这复杂的多,也可以用在复杂数据的存储上,比如我们要把类对象和图片等复杂数据进行存储,就需要将这些对象和图片的字节数据进行Base64编码,然后再讲编码后的String存储到XML文件中。
我们先来简单的了解Base64的原理:3*8=4*6
例子:s13
首先将其转换成ASCII后对应的是:115 49 51 ,这3个数字的二进制是01110011 00110001 00110011,
然后6个为一组(共4组):011100 110011 000100 110011,再将每组高位补全为8个得到:00011100 00110011 00000100 00110011,得到这4组二进制数对应的 十进制:28 51 4 51 ,最后根据这4个数字到表(这个表格百度可以找到)中其所对应的值:c z E z,那么就得到了经过Base64编码后的数据。
关于Base64的代码实现在后面我会给出,现在我们来看一下Android中Base64的使用方法。
在网上找到关于Base64的文章很少,所以就自己看了Android源码做出下面的总结,如有错误地方请指出。我们来看一下Andorid中提供给我们可以使用的Base64函数的编码。
Base64类提供了四个编码函数,其他三个最终都会调用encode(byte[] input,int offset,int len,int flags)。因为我们在使用时有两种需求:返回字节数组被编码后得到的字符串和返回字节数组被编码后得到字节数组。encode函数返回字节数组被编码后得到的字节数组,encodeToString内部调用了encode, 并将返回的字节数组转换成字符串。下面来看看关于解码的函数:
解码函数的类型和使用与编码函数类似,我就不再赘述了。对于在本文开头所举的例子:s13进行编码后得到czEz的代码实现如下:
得到的str值为czEz。那么对czEz进行解码操作后就能得到s13了。
得到的str_decode的值就为s13,在断点调试时就会发现字节数组byteDecode中值为[ 115,49,51],刚好就是s13的ASCII值。我们只需用String转换一下即可。
上面分析了Android内置的Base64编码和解码,但是其只提供了简单的字符串或字节数组的编解码,我们在项目开发中就会发现时我们的需求是多种多样的,如果使用内置的Base64会导致项目中代码过多,所以我们一般自己实现Base64加解码,自定义很多方法。我会单独写一篇博客来讲解实现自定义的Base64。
下面我们在项目中来使用Base64来实现复杂数据的存取,这里是使用SharedPreferences来存取的,SharedPreferences是最简单的存取方式,只能用于存放key-value对,一般我们只用于存取int,String等基本类型,这里我们通过将复杂数据类型,比如类对象和图片,进行编码后再以键值对的形式存储。
先看一下实现的效果: 1. 将两个编辑框中的数据赋值给类对象然后进行编码后存储起来,再解码后显示出来;
2.将图上的红点图像编码保存,再解码显示到底部的安卓头像上。
我们的要存储的类,需要序列化:
- Base64编码与解码原理和使用及复杂数据的存储
- Base64编码与解码原理和使用及复杂数据的存储
- Base64编码与解码原理和使用及复杂数据的存储
- ase64编码与解码原理和使用及复杂数据的存储
- Base64的使用,解码和编码
- Base64编码原理及编码、解码实现
- Base64编码/解码原理及实现
- BASE64的解码与编码
- BASE64的解码与编码
- Base64的编码与解码
- base64的编码和解码
- Base64的编码和解码
- BASE64 的编码和解码
- Base64编码解码原理
- Base64 编码 解码 原理
- Base64编码解码原理
- Base64编码及解码
- Base64编码及解码
- 代码与inline关键字的使用
- 详细解读 LLDB 调试器
- 视差滚动
- 将PSD转换为前端网页其它注意事项
- Weblogic 数据源 连接池占满的一种解决思路
- Base64编码与解码原理和使用及复杂数据的存储
- 程序员必读书单 1.0
- study-11 文件系统选型及nfs网络文件
- Git使用记录,项目中常用的操作步骤。无概念
- ase64编码与解码原理和使用及复杂数据的存储
- java递归查询公司下所有部门及子部门
- AEAI DP V3.7.0 发布,开源综合应用开发平台
- 架构师
- ODBC和ADO DAO