归档和解档
Serialization
什么是Serialization?
写数据到本地磁盘或者进行传输时,需要进行序列化,转化成二进制流,从而便于传输和存储。同理,得到二进制流后,需要进行反序列化,还原成可以使用的数据。
需要注意的是,不同的环境,serialize和unserialize是不同的。一般同一环境中的操作才能得到正确的数据。
为什么要Serialization?
- 数据持久化
- 数据共享
- 程序之间(多进程)
- 跨操作系统的数据共享
- 通过网络进行数据传递
- 数据存储到磁盘
归档
写入到文件时,可以采用下面的方法
1.writeFoFile
采用这种方法可以直接打开查看utf-8编码的haha.txt文件
NSString *name = @"zhangsan";
NSString *path = @"/Users/Long/wrk/haha.txt";
[name writeToFile:path atomically:YES
encoding:NSUTF8StringEncoding
error:&error];
2.archiveRootObject
NSString *name = @"zhangsan";
NSString *path = @"/Users/Long/wrk/haha.txt";
[NSKeyedArchiver archiveRootObject:name toFile:path];
打开haha.txt, 发现是如下所示的内容
bplist00‘������
X$versionX$objectsY$archiverT$top��܆¢��U$nullXzhangsan_��NSKeyedArchiver—�TrootÄ����#-27:@I[^c��
e
3.archivedDataWithRootObject
NSString *name = @"zhangsan";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:name];
解档
对NSData数据的解档
[NSKeyedUnarchiver unarchiveObjectWithData:data];
自定义的类归/解档
需要实现<NSCoding>代理方法
- (id) initWithCoder: (NSCoder *)coder
- (void) encodeWithCoder: (NSCoder *)coder