OC-归档和解归档
1 //歸檔:將對象數據存儲到文件的過程 NSArchiver
2 //反歸檔:從文件中讀取數據到對象中的過程
3
4 int main(int argc, const char * argv[]) {
5 @autoreleasepool {
6
7 #if 0
8 //使用系統的方法進行歸檔 NSArchiver
9 NSDictionary *mutDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"111",@"one",@"222",@"two", nil];
10 [mutDic setValue:[NSDate date] forKey:@"date"];
11 [mutDic setValue:[NSNumber numberWithInteger:8889] forKey:@"num"];
12 [mutDic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
13
14 BOOL flag = [NSArchiver archiveRootObject:mutDic toFile:@"/Users/qianfeng/Desktop/day21-OC11_時間類/day21_OC11_歸檔與反歸檔/arch.txt"];
15 if (flag) {
16 NSLog(@"文件歸檔成功");
17 }else{
18 NSLog(@"文件歸檔失敗");
19 }
20
21 #endif
22
23 #if 0
24 //使用系統進行反歸檔 NSUnarchiver
25 NSDictionary *dict1 = [NSUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/day21-OC11_時間類/day21_OC11_歸檔與反歸檔/arch.txt"];
26 if (dict1) {
27 NSLog(@"dict = %@",dict1);
28 }
29 #endif
30
31 //#if 0
32 //使用系統的方法進行歸檔 NSKeyedArchiver
33 NSDictionary *mutDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"111",@"one",@"222",@"two", nil];
34 [mutDic setValue:[NSDate date] forKey:@"date"];
35 [mutDic setValue:[NSNumber numberWithInteger:8889] forKey:@"num"];
36 [mutDic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
37
38 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mutDic];
39 BOOL ret = [data writeToFile:@"/Users/qianfeng/Desktop/day21-OC11_json_歸檔和解歸檔類/day21_OC11_歸檔與反歸檔/lpj.plist" atomically:YES];
40 if (ret) {
41 NSLog(@"歸檔成功");
42 }
43 else{
44 NSLog(@"歸檔失敗");
45 }
46
47 //#endif
48
49 #if 0
50 //解歸檔
51 NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/day21-OC11_json_歸檔和解歸檔類/day21_OC11_歸檔與反歸檔/lpj.plist"];
52 //NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/day21-OC11_時間類/day21_OC11_歸檔與反歸檔/data.txt"];
53 NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
54 if (dict) {
55 NSLog(@"解歸檔成功");
56 NSLog(@"%@",dict);
57 }else{
58 NSLog(@"解歸檔失敗");
59
60 }
61 #endif
62
63 #if 0
64 // NSSearchPathForDirectoriesInDomains 這個主要就是返回一個絕對路徑用來存放我們需要儲存的文件。
65 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
66 NSString *documentsDirectory = [paths objectAtIndex:0];
67 NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@"shoppingCar.plist"];
68 #endif
69
70
71 }
72
73
74 @autoreleasepool {
75
76 #if 0
77
78 //手動歸檔 - (instancetype)initForWritingWithMutableData:(NSMutableData *)data;
79
80 //創建一個可變的數據對象
81 NSMutableData *mulData = [[NSMutableData alloc] init];
82
83
84 NSKeyedArchiver *keyArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mulData];
85 //數組對象
86 NSArray *array = [NSArray arrayWithObjects:@"one",[NSNumber numberWithInteger:1111],[NSDate date],[@"i love ios" dataUsingEncoding:NSUTF8StringEncoding], nil];
87 //字典對象
88 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"111",@"one",array,@"array",[NSNumber numberWithInt:1212],@"num",[NSDate date],@"date", nil];
89
90 //對數組和字典進行編碼 原理:其實是是將數組array和字典dict對象寫入到可變數據對象mulData中。之后在利用muData的writeToFile將二進制數據寫入到文檔中
91 [keyArchiver encodeObject:array forKey:@"array"];
92 [keyArchiver encodeObject:dict forKey:@"dict"];
93
94 //編碼結束一定需要調用finishEncoding方法
95 [keyArchiver finishEncoding];
96
97 //寫入文件
98 BOOL flag = [mulData writeToFile:@"/Users/qianfeng/Desktop/day21-OC11_時間類/day21_OC11_歸檔與反歸檔/initForWritingWithMutableData.txt" atomically:YES];
99 if (flag) {
100 NSLog(@"歸檔成功");
101 }else{
102 NSLog(@"歸檔失敗");
103 }
104
105 #endif
106
107 #if 0
108 //手動解歸檔
109 //過程 1.首先創建一個NSData對象,并讀取文件的內容 2.通過NSKeyedUnarchiver 的 initForReadingWithData方法從數據對象中解歸檔對象 3.通過關鍵字從解歸檔對象中獲取數組對象和字典對象
110 NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/day21-OC11_時間類/day21_OC11_歸檔與反歸檔/initForWritingWithMutableData.txt"];
111 NSKeyedUnarchiver *keyUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
112
113 //通過關鍵字 解碼數組
114 NSArray *array = [keyUnarchiver decodeObjectForKey:@"array"];
115 //通過關鍵字 解碼字典
116 NSDictionary *dict = [keyUnarchiver decodeObjectForKey:@"dict"];
117
118 [keyUnarchiver finishDecoding];
119
120 NSLog(@"array = %@",array);
121 NSLog(@"dict = %@",dict);
122
123 #endif
124 }
125 return 0;
126 }
歸檔:將程序中的對象寫入到文件的過程
解歸檔:將文件中的數據讀取為程序中的對象的過程
轉載于:https://www.cnblogs.com/BeyondAverage0908/p/4596798.html
總結
- 上一篇: 【BZOJ】【4145】【AMPPZ20
- 下一篇: WPF将数据库和GridView绑定并更