iOS - OC NSData 数据

前言

    @interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
    @interface NSMutableData : NSData
  • NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。我们可以获得简单缓冲区,并进行一些转换操作。通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据。
  • 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针。
  • 对于 32 位应用程序,NSData 的缓冲区最多可以存储 2GB 数据。对于 64 位应用程序,最多可以存储 8EB(即 8 亿 GB) 数据。

1、NSData 的创建

    // 对象方法创建
    NSData *data1 = [[NSData alloc] init];
    NSData *data2 = [[NSData alloc] initWithData:data1];

    // 类方法创建
    NSData *data3 = [NSData data];
    NSData *data4 = [NSData dataWithData:data3];

    // 由 文件 创建
    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];

    NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];
    NSData *data6 = [NSData dataWithContentsOfFile:filePath];

    // 由 URL 创建
    NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory()
                                                      stringByAppendingString:@"/Desktop/test.txt"]]];

    NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];
    NSData *data8 = [NSData dataWithContentsOfURL:urlPath];

    // 由 字符串 创建
    NSString *string = @"bei jing nin hao";

    NSData *data9 = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSData *data10 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

    // 可变 NSData 的创建

    // 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间
    NSMutableData *data11 = [[NSMutableData alloc] initWithCapacity:5];
    NSMutableData *data12 = [NSMutableData dataWithCapacity:5];

    // 初始化时为对象分配指定长度的归零字节
    NSMutableData *data13 = [[NSMutableData alloc] initWithLength:10];
    NSMutableData *data14 = [NSMutableData dataWithLength:10];

2、NSData 长度的计算

    NSData *data1 = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];

    // 指定空间大小,不分配空间
    NSMutableData *data2 = [NSMutableData dataWithCapacity:5];

    // 分配指定长度的归零字节
    NSMutableData *data3 = [NSMutableData dataWithLength:10];

    // 字节长度的计算,NSData 的 length 属性是只读的
    NSUInteger length1 = data1.length;

    // 字节长度的计算,NSMutableData 的 length 可以被重新赋值
    NSUInteger length2 = data2.length;

    NSUInteger length3 = data3.length;

    // 重新设置空间的大小,对象的字节空间会相应的扩充或者截断。如果新设置的大小大于当前大小,会在当前数据的
    data2.length = 15;

    // 末尾处用归零字节来进行填充。如果新设置的大小小于当前大小,数据会被截断抛弃。
    data3.length = 15;

    // 扩充指定长度,新添加的空间被设置为归零字节
    [data2 increaseLengthBy:5];
    [data3 increaseLengthBy:5];

3、NSData 数据的获取

    NSData *data = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];

    // 默认为内容数据的十六进制编码
    NSString *str1 = data.description;

    NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString *str3 = [[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding];

4、NSData 的比较

    NSData *data1 = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *data2 = [NSData dataWithData:data1];

    // 比较两个对象的地址是否一致
    BOOL bl1 = data1 == data2;

    // 比较两个对象的长度及每字节的数据是否相同
    BOOL bl2 = [data1 isEqualToData:data2];

5、NSData 的存储

    NSData *data = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];

    // 将数据写入 file
    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/NSDataTest.txt"];
    BOOL bl1 = [data writeToFile:filePath atomically:YES];

    // 将数据写入 URL

    // 该方法只支持 file:// 路径的文件写入,并不能对远程如 http:// 等类型文件进行写入
    NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory()
                                              stringByAppendingString:@"/Desktop/NSDataTest.txt"]]];
    BOOL bl2 = [data writeToURL:urlPath atomically:YES];

6、NSData 与 NSString 的相互转换

    NSString *string = @"bei jing nin hao";

    // NSString 转 NSData
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    // data 类型数据以十六进制的形式打印出
    NSLog(@"%@", data);

    // data 类型数据以字符串的形式打印出
    NSLog(@"%s", data.bytes);

    // NSData 转 NSString
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
时间: 2024-09-20 06:09:00

iOS - OC NSData 数据的相关文章

iOS - OC NSKeyedArchiver 数据归档

前言 @interface NSKeyedArchiver : NSCoder @interface NSKeyedUnarchiver : NSCoder 在 OC 语言中,归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象.通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象.可以使用归档的方法进行对象的深复制. 采用归档的形式来保存数据,该数据对象需要遵守 NSCoding 协议,并且该对象对应的类必须提供 encodeWithCoder: 和 initWit

iOS - OC PList 数据存储

前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码.一般可以使用属性列表文件存储 NSArray 或者 NSDictionary 之类的数据,这种 "属性列表文件" 的扩展名是 plist,因此也称为 "plist 文件". plist 是以 xml 文件形式存储的. 如

iOS - Swift NSData 数据

前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutableData : NSData NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装.我们可以获得简单缓冲区,并进行一些转换操作.通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据. 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针. 1.NSData

iOS - OC NSUserDefaults 数据存储

前言 @interface NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults 里存了一个可变数组,取出来的时候这个数组对象就变成了不可变的. NSUserDefaults 可以存储的数据类型包括:NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary.如果要存储其他类型,则需要转换为前面的类型,才能用 NSUserDefaul

IOS中JSON数据的解析

IOS中JSON数据解析 官方为我们提供的解析JSON数据的类是NSJSONSerialization,首先我们先来看下这个类的几个方法: + (BOOL)isValidJSONObject:(id)obj; 判断一个数据对象是否可以转化为JSON数据 + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error; 将JSON数据写为NSData数据,其中opt参数

javaweb-IOS 获取图片路径然后生成NSData数据,Java做的后台怎么接收数据并保存

问题描述 IOS 获取图片路径然后生成NSData数据,Java做的后台怎么接收数据并保存 RT,现在在进行一个项目,好久没写代码了,这个要与IOS进行交互,IOS那边生成的NSData数据,action需读取并保存,哪位能指点一下迷津,不要讲上传原理,原理我造 - -

Swift使用gzip压缩NSData数据(附:请求时将JSON数据进行压缩)

GZIP 是为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式.使用 GZIP 一来可以减少存储空间,二来通过网络传输文件时,可以减少传输的时间. 大流量的WEB站点常常使用GZIP压缩技术,将网页内容压缩后传输到来访的电脑浏览器中显示出来(一般对纯文本内容可压缩到原大小的40%),大大提高了传输速度. 在iOS开发中,我们客户端也是可以利用 GZIP 来进行数据压缩的,比如网络请求时,将数据量比较大的参数进行压缩再传输,可以节约流量,提高速度. 一,使用gzip压缩NSD

iOS - OC 面向对象语法

1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(category):允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量).扩展自己或他人以前实现的类,使它适合自己的需要. 分类的名称括在类名之后的一对圆括号"( )"中. @interface QCStudent (Print) @end @implementation QCStud

iOS开发系列--数据存取

概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经规定只能保存到沙盒的Library/Preferences目录.当然,文件存储并不作为本文的重点内容.本文重点还是说数据库存储,做过数据库开发的朋友应该知道,可以通过SQL直接访问数据库,也可以