前言

  • 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];

NSData 数据的更多相关文章

  1. iOS - OC NSData 数据

    前言 @interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSMut ...

  2. php接口 接受ios或android端图片; php接收NSData数据

    备注下, [自己无意中用的方法]接收时,设置两个参数,一个是图片名称,另一个是实际文件.然后用$_FILES处理就可以了. 如: $icon = $_POST['icon'];//这个是图片的名称,用 ...

  3. iOS - Swift NSData 数据

    前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutabl ...

  4. objective-c 下面int 和 NSData数据 互相转换的方法

    抄自这里 ; NSData *data = [NSData dataWithBytes: &i length: sizeof(i)]; int i; [data getBytes: & ...

  5. Objective-C中关于请求返回NSData数据解析成NSDictionary或NSArray的方法

    1.如果后台返回的是字典或数组的data型,直接使用以下方法转换: { // Data 转成 字典 其中responseObject为返回的data数据 NSDictionary *resultDic ...

  6. 使用NSData处理数据

    // //  main.m //  06-使用NSData处理数据 // //  Created by apple on 14-3-21. //  Copyright (c) 2014年 apple. ...

  7. IOS数据存储之NSUserDefaults

    前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...

  8. iOS解析数据时Error=3840

    1.解析JSon数据格式出错的问题 unescaped control character around character XXXX 和 The data couldn’t be read beca ...

  9. 数据存储与IO(一)

    应用程序沙盒简介:iOS应用程序只能在系统为它分配的文件区域内读写文件,这个区域就是此应用程序的沙盒,Application目录下的GUID文件夹就是沙盒,这个文件夹是系统随机命名的.程序所有的非代码 ...

随机推荐

  1. [Kingdom Rush]团队分享:如何做塔防手游

    转自:http://www.gamelook.com.cn/2015/03/207324 GameLook报道/2014年11月,乌拉圭开发商Ironhide Studios发布的<Kingdo ...

  2. java成神之——集合框架之Maps,Hashtable

    集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...

  3. 配置Linux接收H3C路由器日志

    (1)H3C  Device上的配置 # 开启信息中心. <Sysname> system-view [Sysname] info-center enable # 配置发送日志信息到IP地 ...

  4. 最长回文子串(Mirrored String II)

    Note: this is a harder version of Mirrored string I. The gorillas have recently discovered that the ...

  5. 【问题】/usr/bin/env: php: 没有那个文件或目录

    php不是默认安装的,在使用symfony创建新项目时,出现这个提示. [root@localhost html]# symfony demo /usr/bin/env: php: 没有那个文件或目录 ...

  6. JAVA基础知识总结15(集合容器)

    集合框架:用于存储数据的容器. 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1: ...

  7. Texture Filter

    [Texture Filter] 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一 ...

  8. 【原创】0. MYSQL++的环境准备

    1. 获取 Google MYSQL++,第一个就是,然后跟着要求进行下载. 2. 编译和安装 其实在作者的各种README文档里面已经写得很清楚了,现在对一些可能会出现问题的地方进行一下回顾. Wi ...

  9. array_splice()函数 ,删除数组中的某个值

    array_splice() 这个函数是真的皮,有好多种方法,但是最后还是在PHP官方的文档找到了合理的解释的用法 花了大概半个小时 $arr = array('a','b','c','d'); ar ...

  10. SaeMail使用示例

    SAE的官方文档:http://apidoc.sinaapp.com/sae/SaeMail.html SaeMail类的具体实现:http://apidoc.sinaapp.com/__fileso ...