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];
NSData 数据的更多相关文章
- iOS - OC NSData 数据
前言 @interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSMut ...
- php接口 接受ios或android端图片; php接收NSData数据
备注下, [自己无意中用的方法]接收时,设置两个参数,一个是图片名称,另一个是实际文件.然后用$_FILES处理就可以了. 如: $icon = $_POST['icon'];//这个是图片的名称,用 ...
- iOS - Swift NSData 数据
前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutabl ...
- objective-c 下面int 和 NSData数据 互相转换的方法
抄自这里 ; NSData *data = [NSData dataWithBytes: &i length: sizeof(i)]; int i; [data getBytes: & ...
- Objective-C中关于请求返回NSData数据解析成NSDictionary或NSArray的方法
1.如果后台返回的是字典或数组的data型,直接使用以下方法转换: { // Data 转成 字典 其中responseObject为返回的data数据 NSDictionary *resultDic ...
- 使用NSData处理数据
// // main.m // 06-使用NSData处理数据 // // Created by apple on 14-3-21. // Copyright (c) 2014年 apple. ...
- IOS数据存储之NSUserDefaults
前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...
- iOS解析数据时Error=3840
1.解析JSon数据格式出错的问题 unescaped control character around character XXXX 和 The data couldn’t be read beca ...
- 数据存储与IO(一)
应用程序沙盒简介:iOS应用程序只能在系统为它分配的文件区域内读写文件,这个区域就是此应用程序的沙盒,Application目录下的GUID文件夹就是沙盒,这个文件夹是系统随机命名的.程序所有的非代码 ...
随机推荐
- cs231n线性分类器作业 svm代码 softmax
CS231n之线性分类器 斯坦福CS231n项目实战(二):线性支持向量机SVM CS231n 2016 通关 第三章-SVM与Softmax cs231n:assignment1——Q3: Impl ...
- classmethod VS staticmethod
- Android 4学习(8):用户界面 - Fragment
参考<Professional Android 4 Development> Fragment简介 Fragment是我们可以将Activity分成不同的组成部分,这些组成部分拥有自己的生 ...
- django表单的字段验证(clean_<fieldname>())和ajax的字段验证
django中的Form有个很重要的功能:验证用户输入 而验证用户输入也可以分为2种: (1)前端本身的验证,例如:字段是否可为空,手机号码格式是否正确等: (2)前端输入数据和后台数据库数据的验证, ...
- document.ready与window.load区别
jQuery document window load ready 区别详解 用过JavaScript的童鞋,应该知道window对象和document对象,也应该听说过load事件和ready事件, ...
- Android输入法部分遮挡UI的问题(与EditText框相切)
首先,我们来看看遇到问题的图片 遇到的问题是,当点击输入框之后,输入法会切到红线的位置,理想状态应该是在绿线位置 那么,是什么原因造成的呢? 问题其实很简单,是因为drawableleft图片比该输入 ...
- 闲来无事,做做Google:21 道能力倾向测试面试题
1. Solve this cryptic equation, realizing of course that values for Mand E could be interchanged. No ...
- 值得一做》一道类似于货车运输的题目(BZOJ3732)(easy+)
这是一道模板套模板的题目,只要会LCA和最小生成树就可以做,水题 直接先甩题目 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条 ...
- 【bzoj2144】跳跳棋
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 492 Solved: 244[Submit][Status][Discuss] ...
- 转-使用wifi调试程序
转自:http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 数据线丢了,不想花钱去买,在网上看了看,an ...