NSKeyedArchiver

base64编码

该编码使用64个明文来编码任意的二进制文件,它里面只使用了 A-Z, a-z, 0-9, +, / 这64个字符。(编码里面的“=”是填充字符)

base64编码使加密算法更加简洁高效。

算法详解

Base64编码要求把3个8位(bit)即1字节(byte)转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式。

base64编码表
码值字符码值字符码值字符码值字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/
示例

16进制的data:62706c
转化为二进制: 01100010 01110000 01101100
分成4*6并加0: 011000 100111 000001 101100
根据base64编码表转化为字符:YnBs

base64EncodedString

随着iOS7正式版推出,Apple增加了使用Base64编解码的支持。

下面使用base64编码让数据在NSData和NSString之间转化
NSData *data = [@"Base64 encode test" dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Encoded = [data base64EncodedStringWithOptions:0];
NSLog(@"Encoded: %@", base64Encoded);

NSData *dataFromBase64String = [[NSData alloc]
initWithBase64EncodedString:base64Encoded options:0];
NSString *base64Decoded = [[NSString alloc] 
initWithData:dataFromBase64String encoding:NSUTF8StringEncoding];
NSLog(@"Decoded: %@", base64Decoded);

控制台输出:
Encoded: QmFzZTY0IGVuY29kZSB0ZXN0
Decoded: Base64 encode test

NSKeyedArchiver

KeyedArchiver能够保存这些类型的对象:NSArray, NSDictionary, NSDate, NSNumber, NSString, and NSData.

如果上面的那些类型不能满足要求,则可以通过使用Protocol NSCoding来自定义自己的对象,要实现一下协议方法:
(void)encodeWithCoder:(NSCoder *)aCoder;
(nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

归档、解归档对象
Object *encodeObj = [[Object alloc] init];
//归档,归档之后还可以对数据进行加密处理
//API Reference对返回值data描述:An NSData object containing the encoded form of 
//the object graph whose root object is rootObject. The format of the archive 
//is NSPropertyListBinaryFormat_v1_0.
//NSKeyedArchiver的返回值为属性为NSPropertyListBinaryFormat_v1_0的二进制格式。
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:encodeObj];
NSString *str = [data base64EncodedStringWithOptions:0];

//进行存档等操作
//...

//解归档
data = [[NSData alloc] initWithBase64EncodedString:str options:0];
Object *decodedObj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值