歸檔和解檔
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