数据的序列化,持久化,归档

数据的序列化,持久化,归档

1.Foundation

2.数据属性列表(NSArray,NSDictionary)

3.sqlite,cocodata

归档后文件的数据会自动加密,不再是明文,局限性在于,只能对一个对象进行归档

/**归档,数据持久化,数据序列化**/

/*

NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/text.arc"];

NSArray *array = @[@"jack",@"tom",@"dav",@123789];

BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:filePath];

if (success) {

NSLog(@"文件归档成功!!!");

}

*/

/**解归档***/

NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/text.arc"];

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

NSLog(@"array :%@",array);

//对多个对象进行归档的,自定义方式

//----------------1.第二种归档--------------------------------

/*自定义归档**/

/*

NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/coustom.archiver"];

NSMutableData *data = [NSMutableData data];

NSKeyedArchiver *archiverFile = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

NSArray *array = @[@"jack",@"tom"];

[archiverFile encodeInt:100 forKey:@"age"];

[archiverFile encodeObject:array forKey:@"name"];

[archiverFile finishEncoding];

[data writeToFile:filePath atomically:YES];

[archiverFile release];

*/

/**自定义解归档***/

NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/coustom.archiver"];

NSData *data = [NSData dataWithContentsOfFile:filePath];

NSKeyedUnarchiver  *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

int age = [unArchiver decodeIntForKey:@"age"];

NSArray *arrayName = [unArchiver decodeObjectForKey:@"name"];

[unArchiver release];

NSLog(@"age=%d,arrayName:%@",age,arrayName);

对象要实现归档则要实现代理<NSCoding>

//归档

- (void)encodeWithCoder:(NSCoder *)aCoder

{

[aCoder encodeObject:_name forKey:NAME];

[aCoder encodeObject:_email forKey:EMAIL];

[aCoder encodeObject:_password forKey:PASSWORD];

[aCoder encodeInt:_age forKey:AGE];

}

//解档

- (id)initWithCoder:(NSCoder *)aDecoder

{

self = [super init];

if (self != nil) {

_age = [aDecoder decodeIntForKey:AGE];

_name = [[aDecoder decodeObjectForKey:NAME] copy];

self.email = [aDecoder decodeObjectForKey:EMAIL];

self.password = [aDecoder decodeObjectForKey:PASSWORD];

}

return self;

}

-(NSString *)description

{

NSString *str = [NSString stringWithFormat:@"name==%@,age==%d,email==%@,password==%@",_name,_age,_email,_password];

return str;

}

时间: 2024-08-29 12:52:50

数据的序列化,持久化,归档的相关文章

UISenior之数据的本地化持久化

数据的本地化主要分为两个方面:1.简单数据的本地持久化(NSString.NSArray.NSDictionary.NSData)2.复杂数据的本地持久化(本文以Person类为例) 简单对象的本地化: 简单对象的本地化基本可以分为四步: 第一步:找到Documents的文件夹的路径. 第二步:我们要知道存储什么,所以要创建存储的对象 第三步:需要知道字符串最终的存储的地方,所以需要创建一个路径去存储字符串 第四步:准备工作完成,将字符串写入文件 下面具体实现上述四步: 第一步 //    第一

Json数据的序列化与反序列化的三种常用方法介绍

以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待... 本文主要介绍在Json数据的序列化与反序列化的过程中我经常用到的三种工具的基本使用方法,及其他们之间 的比较...希望能够对读者们有一些帮助... 这里介绍到的三种解析与生成Json数据的方法分别是:标准JSON解析与生成方法.使用gson解析与生成JSON数据 .使用fastJsson解析与生成JSON数据. 首先,这些工具都可以到

JSON数据的序列化方法

ajax传参是json数据对象时,最好是将json对象先序列化 var stuAnswerTotal = examModule.touch.getData('examAnswer'); console.log(stuAnswerTotal);//Object对象如下 { 17072={ "id" : 1702, "type":"1",                "val":["",'"&quo

js实现对json数据的序列化(兼容ie6以上浏览器)

/** * 增加对JSON数据的序列化方法, * 主要用于IE6.7不支持JSON对象的浏览器 */ var xue = xue || {};xue.json = xue.json || {}; xue.json.stringify = function(obj) {    //如果是IE8+ 浏览器(ff,chrome,safari都支持JSON对象),使用JSON.stringify()来序列化    if (window.JSON) {        return JSON.stringi

UDP畅聊系统数据的序列化与反序列化

comm中实现基本数据的序列化与反序列化 基于jsoncpp库,由c++编写,用于为网络数据提供序列化及反序列化功能 使用的几个类 Json::Value 可表示所有的类型,int,float,string等 Json::Reader 将json字符串解析到Value中,反序列化,使用Parse函数 Json::Writer 将Value转换成json字符串型,序列化 它的两个子类:Json::FastWriter 和Json::StyledWriter 两种不同的显示风格 Makefile  

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

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

vue.set的使用和vue数据的序列化

首先简单说一下vue双向数据绑定在实际应用上会有一点异常. 1.比如我想使用一个数组内部数据的改变,直接使用arr[0]='bbbb',这样是不会触发数据绑定的.视图不会变化. 2.这个问题就纯是js的问题了..我们需要把一个json数据的值赋值给另一个,当我们改变另一个数据内部的数据时.第一个也会跟着改变 一.首先对于问题一,官方已经给了很好的解释.怪就怪在我没有仔细看文档吧.记录一下涨个记性. <template> <div class="hello"> &

IOS 数据存储(NSKeyedArchiver 归档篇)

什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字典.NSNuber.BOOL等容器类对象,不能将自定义对象进行保存,而通过归档能将所有的对象转化为二进制数据存储到文件中. 归档的缺点 归档保存数据,只能一次性归档保存以及一次性解压.所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据.

数据持久化(归档和反归档操作 ,清除缓存等等)

数据持久化的步骤 // 1.指定前往哪个文件夹 // 2,用字符串接收路径 // 3.拼接文件夹路径 // 4.写入本地或者归档操作 // 注 :如果是复杂对象归档 ,要签订NSCoding方法 .并且实现两个协议方法,放在数组里的复杂对象归档也要签协议 苹果手机为了保证自己数据上的绝对的安全设计了沙盒文件 ,每一个应用程序都配备了自己的沙盒文件 ,每一次运行 ,文件夹的名字就会变成一个没有任何规律的字符串 复杂对象写入到本地 ,主要至我们自己创建的对象写入到本地, 也叫归档和反归档操作 结构体