NSData

作者: coder_hong | 来源:发表于2016-06-08 16:02 被阅读288次

    简介

    • NSData是用来包装数据的,NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储。在多媒体开发时,比较常用,例如拼接音频、图片。
    字符串与NSData
    • 字符串 -->NSData
     NSString *aString = @"http://www.baidu.com";
     NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
    
    • NSData -->字符串
      NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];
    
    Byte与NSData
    • NSData --> Byte
     NSString *testString = @"1234567890";
     NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];  
     Byte *testByte = (Byte *)[testData bytes];
    
    • Byte --> NSData
    Byte byte[] = {0,1,2,3,4,5,6,7};
    NSData *adata = [[NSData alloc] initWithBytes:byte length:8];
    
    NSData -->UIImage
    • NSData --> UIImage
     UIImage *aImage = [UIImage imageWithData: imageData];
    
    • 例:从本地文件沙盒中取图片并转换为NSData
     NSString *path = [[NSBundle mainBundle] bundlePath];
     NSString *name = [NSString stringWithFormat:@"ceshi.png"];
     NSString *finalPath = [path stringByAppendingPathComponent:name];
     NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
     UIImage *aimage = [UIImage imageWithData: imageData];
    
    // 
    NSData *imageData = UIImageJPEGRepresentation(image, compressionQuality);
    
    NSData *imageData = UIImagePNGRepresentation(aimae);
    
    • NSData与 NSMutableData
    NSData *data=[[NSData alloc]init];
    NSMutableData *mData=[[NSMutableData alloc]init]; 
    mData=[NSData dataWithData:data];
    

    通过NSData 和 NSKeyedArchive 实现一个文件归档多个对象

    • 使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中
    • 但有时候可能想将多个对象写入到同一个文件中
    • 那么就要使用NSData来进行归档对象

    实现原理

    • 利用NSData为一些数据提供临时存储空间
      • 以便随后写入文件,或者存放从磁盘读取的文件内容
      • 可以使用[NSMutableData data]创建可变数据空间
    屏幕快照 2016-06-08 下午3.42.15.png

    实例操作

    归档(编码)

    // 新建一块可变数据区
    NSMutableData *data = [NSMutableData data];
    
    // 将数据区连接到一个NSKeyedArchiver对象
    NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
    
    // 开始存档对象,存档的数据都会存储到NSMutableData中
    [archiver encodeObject:person1 forKey:@"person1"];
    [archiver encodeObject:person2 forKey:@"person2"];
    
    // 存档完毕(一定要调用这个方法)
    [archiver finishEncoding];
    
    // 将存档的数据写入文件
    [data writeToFile:path atomically:YES];
    

    NSData-从同一文件中恢复2个Person对象
    恢复(解码)

    // 从文件中读取数据
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    // 根据数据,解析成一个NSKeyedUnarchiver对象
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    
    Person *person1 = [unarchiver decodeObjectForKey:@"person1"];
    Person *person2 = [unarchiver decodeObjectForKey:@"person2"];
    
    // 恢复完毕
    [unarchiver finishDecoding];
    

    相关文章

      网友评论

        本文标题:NSData

        本文链接:https://www.haomeiwen.com/subject/drejdttx.html