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 }

归档:将程序中的对象写入到文件的过程

解归档:将文件中的数据读取为程序中的对象的过程

时间: 2024-10-20 01:25:40

OC-归档和解归档的相关文章

【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结

对对象进行归档,和对对象进行拷贝差不多路数,也就是需要协议,之前的时对NSString和NSNumber这些对象为什么没有归档协议?因为它们自带了. 所以如果我们要对自定义的对象(而不是Foundation里默认的对象)进行归档的话就需要引入归档协议<NSCoding>. 举例:声明一个User类,然后创建一个对象user1,把这个user1进行归档,然后把归档后的文件解归档到user2中,看看是否是原先的那些数据. (1)User.h #import <Foundation/Found

iOS:文件归档和解归档的详解和使用

文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用来完成用户的需求.对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径的读取文件的内容(也称为接档,反序列化),(对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看). 区别: 通过文件归档产生的文件是不可见的,如果打开

将通讯录类(姓名、电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法。

/*1.将通讯录类(姓名.电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法.*/ #import <Foundation/Foundation.h>#import "ConTact.h"#define PATH @"/Users/qianfeng/Desktop/hehe/2.plist" int main(int argc, const char * argv[]) {    @autoreleasepool {        ConTact

归档和解归档

沙盒 1.定义 沙盒:IOS的沙盒(sandbox)机制:是一种安全体系,IOS应用程序只能对自己创建的应用程序进行读取文件,这个独立 封闭 安全的空间,就是咱们说得沙盒.他里面一般存放着你的程序需要的文件,数据持久化的一些文件(Plist sqlist…)音视频 图片以及其他资源文件 2.每个应用程序只有一个沙盒 沙盒里面有三个文件夹 1)Documents 目录下的内容 会被同步到另一台设备 可以存放媒体资源 文本资源 2)Library 可以把缓存的内容放到Library/Caches 3

数据的归档和解归档

//归档 BOOL success = [NSKeyedArchiver archiverRootObject:归档的对象 toFile:文件路径]; //解档 id content =  [NSKeyedUnArchiver unarchiveObjectWithFile:文件路径]; //第二种解归档(多对象) //归档 NSString *homePath = NSHomePath(); NSString *filePath = [homePath stringByAppendingPat

大数据开发之文件归档和解归档

一,归档 在大数据开发中往往要运算海量数据,可是这些数据分布在许多小文件中,传输和运算十分不方便,为此我们得进行文件归档 即把几个小文件写到一个文件中形成大文件,可是我们要怎么写呢?每个团队有每个团队的方法,下面介绍我自己的方法. 格式:        4个字节        文件名称的数据存储大小(n,表示存储的文件有几个字节) n个字节        文件名称 4个字节        文件内容的数据存储大小(m,表示存储的文件有几个字节) m个字节        文件内容 有几个小文件,那么

OC学习篇之---归档和解挡

前几篇文章说到了OC中的Foundation框架:http://blog.csdn.net/jiangwei0910410003/article/details/41852835,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有

(转载)OC学习篇之---归档和解挡

前几篇文章说到了OC中的Foundation框架,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 //

【非凡程序员】 OC第十七节课 文件操作二 (归档和解档)

//-----------------------------归档和解档-----(重点)-------.-----------//        //可变的文件流        NSMutableData *nutabdata=[[NSMutableData alloc]init];        //把用归档格式的数据值给可变的文件流        NSKeyedArchiver *keyde=[[NSKeyedArchiver alloc]initForWritingWithMutable