博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - OC NSData 数据
阅读量:6614 次
发布时间:2019-06-24

本文共 4190 字,大约阅读时间需要 13 分钟。

前言

@interface NSData : NSObject 
@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];

转载地址:http://uirso.baihongyu.com/

你可能感兴趣的文章
GNU make manual 翻译(八十二)
查看>>
python批量下载图片的三种方法
查看>>
/bin/bash^M: bad interpreter: 没有那个文件或目录
查看>>
apiCloud手动检测更新
查看>>
动态生成WizardPage
查看>>
iOS - OC NSData 数据
查看>>
Java web 开发填坑记 1 -如何正确的下载 eclipse
查看>>
每日学习与工作计划移至日事清APP
查看>>
iOS - Quartz 2D 第三方框架 Charts 绘制图表
查看>>
MM顾问的常见面试问题(ZZ)
查看>>
转:Windows 8上强制Visual Studio以管理员身份运行
查看>>
迟来的加勒比海盗3 观后
查看>>
类与对象 - PHP手册笔记
查看>>
谈一谈互联网创业补贴变味后的现象
查看>>
MapGIS转Shp文件的单位问题
查看>>
使用Karate轻松实现自动API测试
查看>>
React
查看>>
CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)
查看>>
编写一个基本的Android应用程序
查看>>
我的友情链接
查看>>