归档 文件存储

NSKeyedArchiver *a;  //打包 存入

NSKeyedUnarchiver *b;//解包 取出

//
//  main.m
//  对象归档
//
//  Created by MAC on 15/12/21.
//  Copyright © 2015年 MAC. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 5.利用归档实现对象的深复制
        NSMutableString *s1 = [NSMutableString stringWithString:@"a"];
          NSMutableString *s2 = [NSMutableString stringWithString:@"b"];
          NSMutableString *s3 = [NSMutableString stringWithString:@"c"];

        NSMutableArray *array5 = [NSMutableArray arrayWithCapacity:5];
        [array5 addObject:s1];
        [array5 addObject:s2];
        [array5 addObject:s3];
        //返回的是二进制对象 没有经过文件
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array5];

        //解码二进制对象
        NSMutableArray *array6 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        //对数组中的对象进行修改 不会改变另一个数组
        [s1 insertString:@"changed" atIndex:0];
         NSLog(@"%@",array5);
        NSLog(@"%@",array6);

        // 4.归档自定义类型需要自己实现NSCoding协议和协议的方法
        Person *p1 = [[Person alloc]init];
        p1.pid = 1;
        p1.name = @"tom";
        p1.age = 20;
         NSString *path = @"/Users/mac/desktop/test.data";
        [NSKeyedArchiver archiveRootObject:p1 toFile:path];
        //报错 -[Person encodeWithCoder:]: unrecognized selector sent to instance没有实现协议  -> NSCoding
        /*

         @protocol NSCoding
         编码
         - (void)encodeWithCoder:(NSCoder *)aCoder;
         - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER
          解码
         @end

         2.NSCoder 编码器
         encodeXXXForKey数据类型编码
         decodeXXXForKey  解码

         */

        //解码
        Person *p2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
        NSLog(@"%d,%d,%@",p2.age,p2.pid,p2.name);

      // 3.NSKeyedArchiver *a;  //打包 存入
         NSKeyedUnarchiver *b;//解包 取出
        //NSKeyedArchiver核心方法
        //+ (NSData *)archivedDataWithRootObject:(id)rootObject;
        //+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
         NSString *path = @"/Users/mac/desktop/test.data";
        NSString *str1 = @"这是NSKeyedArchiver数据";
        //压缩的形式存入文件
        [NSKeyedArchiver archiveRootObject:str1 toFile:path];
        NSString *str2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
        NSLog(@"%@",str2);

        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:10];
        [dict setObject:@"one" forKey:@"1"];
        [dict setObject:@"two" forKey:@"2"];
       [dict setObject:@"three" forKey:@"3"];
        [dict setObject:@"four" forKey:@"4"];
        //字典压缩存入
        [NSKeyedArchiver archiveRootObject:dict toFile:path];
        //解压取出
        NSLog(@"%@",[NSKeyedUnarchiver unarchiveObjectWithFile:path]);

        //NSData 二进制的
        //归档 把对象的状态持久保存到文件系统(数据库、网络、云平台)
        Person *p = [[Person alloc]init];
        p.pid = 1;
        p.name = @"tom";
        p1.age = 20;

        //plist =Property List
        NSString *path = @"/Users/mac/desktop/test.txt";
        NSString *str = @"Hello World";
        //写入文件 atomically:YES 是否产生临时文件 保证数据的完整性
        [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
        //从文件读取出来
        str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@",str);
        NSArray *array = @[@"one",@"two",@"three"];
        [array writeToFile:path atomically:YES];

        NSArray *array1 = [NSArray arrayWithContentsOfFile:path];
        NSLog(@"%@",array1);

    }
    return 0;
}
//
//  Person.h
//  对象归档
//
//  Created by MAC on 15/12/21.
//  Copyright © 2015年 MAC. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>
@property(nonatomic)int pid;
@property(nonatomic,copy)NSString *name;
@property(nonatomic)int age;
@end
//
//  Person.m
//  对象归档
//
//  Created by MAC on 15/12/21.
//  Copyright © 2015年 MAC. All rights reserved.
//

#import "Person.h"

@implementation Person
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeInt:self.pid forKey:@"pid"];
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInt:self.age forKey:@"age"];
}
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{

    self.pid = [aDecoder decodeIntForKey:@"pid"];
    self.name = [aDecoder decodeObjectForKey:@"name"];
    self.age = [aDecoder decodeIntForKey:@"age"];
    return  self;
}
@end
时间: 2024-10-25 07:52:41

归档 文件存储的相关文章

IOS开发--数据持久化篇之文件存储(一)

前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不胜感激. 什么叫数据持久化: 在这里我就不照搬教科书上抽象的概念了.我觉得既然要把东西写出来就让它简单明了. 要搞清楚数据持久化,首先要知道数据持久化是相对于缓存而言的,缓存是在程序运行的过程中保存在内存中,程序一旦运行结束,其内存就会被释放.缓存在内存中的数据也就随之消失. 那么数据持久化就是要解

【云快讯】之二十六《AWS推出网络文件存储EFS,进军NAS存储市场》

2015-04-10 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 亚马逊网络服务的不断蚕食企业存储市场,AWS最新计划发布一个新服务替代网络附加存储(NAS)设备.亚马逊弹性文件系统(EFS)将提供一个共享的,低延迟的文件系统,用于支持项目团队和组织内部需要共享大型文件,并快速访问它们的场景,如视频制作公司等. "该文件系统在云服务普及的今天是缺少的一环,"Amazon Web Services的负责人安迪·雅西周四在AWS峰会在旧金山表示该服

iOS归档与解归档,持久化存储

点此下载iOS归档,持久化存储,解归档详细工程 //数据持久化的本质:将数据读取成文件保存在本地. 沙盒机制就是系统针对于每一个程序在本地生成的文件夹(名字随机生成), 对于不同的应用程序, 不能访问其他应用程序沙盒内的内容, 对于该应用程序内容起到保护作用:1 Documents:用来存储长久保存的数据 2 xxx.app:应用程序的包, 包含应用程序加载所需的所有资源(readonly只读, 不可修改), 平时使用的NSBundle就是该包 3 Library: 1) Caches:本地缓存

Android文件存储的问题:ClassLoader和实现Parcelable接口后 详解及用途

可能小伙伴们读了我上一篇博客关于Android文件存储的的,在文件操作的时候大家有没有疑问呀,有就对了,可能在保存自定义对象的时候,如何序列化呀?ClassLoader到底是啥鬼呀?序列化后怎么读取出来呀?好吧,针对于上面的问题,我一个一个的说明吧! 今天主要是讲ClassLoader的用途, ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 1.1 几个相关概念ClassLo

块存储、文件存储和对象存储

一.块存储 典型设备:磁盘阵列,硬盘 块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘.做Raid.或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘.(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了.例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘.) 接着块

对象存储与块存储、文件存储等对比

看到 一篇文档, 讲 对象存储, 好奇,搜索文章,摘抄,学习记录 ! 背景: 传统存储在面对海量非结构化数据时,在存储.分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结构化内容设计或优化.成本过高.并非PB级的扩展.不支持永远在线.专有的一体机设备等等,非结构化数据以每年60%-80%的速率增长,从而可扩展性变成了最迫切的需求. 传统存储在面对海量非结构化数据时,在存储.分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结构化内容设计或优化.成本过高.并非

PHP通过文件存储来实现缓存

PHP通过文件存储来实现缓存 在一些数据库数据记录较大,但是服务器有限的时候,可能一条MySQL查询就会好几百毫秒,一个简单的页面一般也有十几条查询,这个时候也个页面加载下来基本要好几秒了,如果并发量高的话服务器基本就瘫痪了,造成一个页面很久也加载不下来,这个时候我们可以使用文件缓存来缓解下MySQL的压力,下面给个使用例子. [php] view plaincopy <?php //页面业务逻辑处理,获得结果 $objPage = new Page_IndexModel($arrParams)

Hadoop文件存储的葵花宝典

文件存储分行存储和列存储,每个存储格式里面又分不同的类型,在实际的应用中如何去使用?怎样去使用?快来围观吧! 文件存储格式,我们在什么时候去指定呢?比如在Hve和Ipala中去创建表的时候,我们除了指定列和分隔符,在它的命令行结尾有STORED AS参数,这个参数默认是文本格式,但是文本不适合所有的场景,那么在这里我们就可以改变文本的信息. 那么到底我们应该选择哪些格式呢?每种格式都有什么样的特点呢?我们为什么要去选择这种格式呢? 一.文本文件: 文本文件是Hadoop里面最基本的文件类型,可以

【Android】14.2 外部文件存储和读取

分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 1.基本概念 内部存储的私有可用存储空间一般都不会很大,对于容量比较大的文件,例如视频等,应该将其存储在外部存储设备(SD卡)上. 注意,不要将手机内存和手机内插入的存储卡(手机卡.SD卡)混淆在一起,内存是不能持久存储的,一关机所有信息就全部丢失了,而内部存储(移动经销商卖的手机卡,容量小,但是没有它打不了电话).外部存储(SD卡,容量大,各种文件都能保存)都是可以持久存储的设备,因此才叫文件存储. 可以通过