Foundation框架中的NSData
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Foundation框架中的NSData相关的知识,希望对你有一定的参考价值。
看官们,我们在前面章回中介绍了Foundation框架中Collections主题,本章回中将介绍Foundation框架中的NSData。
NSData表示数据缓冲区,主要用来缓冲文件的输入和输出。它是Foundation框架提供的类,接下来我们介绍该类中常用的方法。
初始化
data //创建一个NSData对象,内容为空
(instancetype)dataWithBytes:(const void *)bytes length:(NSUInteger)length;
(instancetype)initWithBytes:(const void *)bytes length:(NSUInteger)length;
上面两个方法的功能一样,都可以创建对象并且使用第一个参数中bytes初始化NSData对象,只是data开头的是静态方法属于类,init开头的是普通方法,属于对象。此外,还有其它的初始化方法,我们就不一一介绍了,大家可以参考官方文档。
该类还有一个反向操作的方法:
- (void)getBytes:(void *)buffer length:(NSUInteger)length;
该方法用来把NSData对象转换成Bytes类对象。
从文件中读取数据
(instancetype)initWithContentsOfFile:(NSString *)path;
该方法用来从文件中获取数据,文件的路径位于参数path中,读取的数据存放于返回值中。
向文件中写入数据
(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
该方法用来向文件中写入数据,文件的路径位于参数path中,写入成功返回YES,否则返回NO。
看官们,上面介绍的是理论知识,接下来我们通过代码来演示如何使用这些方法。下面是具体的代码:
#include<Foundation/Foundation.h>
int main()
{
NSData *data;
char buffer[5] = "hello";
for(int i=0; i<5; ++i) {
NSLog(@" %c",buffer[i]);
}
//使用byte创建并且初始化NSData,代码中使用char数组来代替byte
data = [[NSData alloc] initWithBytes:buffer length:5];
NSLog(@"content of buffer: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
//反向操作:从NSData中获取数据
char bytes[5] = {0} ;
[data getBytes:bytes length:5];
for(int i=0; i<5; ++i) {
NSLog(@" %c",bytes[i]);
}
//从文件中读取数据,可以比较NSLog的输出内容和文件内容,它们相同时说明读取数据正常
NSString *path = @"/Users/talk8/code/oc/test_file_in";
NSData *fData;
fData = [[NSData alloc] initWithContentsOfFile:path];
//把NSData对象转换成NSString对象,方便输出显示
NSString *content = [[NSString alloc] initWithData:fData encoding:NSUTF8StringEncoding];
NSLog(@"%@",content);
//向文件中写入数据,查看方法返回值,或者直接打开文件查看文件中的内容
NSString *patha = @"/Users/talk8/code/oc/test_file_out";
[fData writeToFile:path atomically:YES];
return 0;
}
在代码中我们添加了相关的注释,以方便大家理解代码。此外程序中把NSData转换成NSString对象,这样方便调试或者打印显示。程序中的内容比较少,大家可以直接判断出运行结果,因此我们就不展示程序运行结果了,不过大家一定要自己动手是运行程序,一边分析代码,一边对比程序运行结果是否符合代码逻辑。
此外,关于文件的读取和写入操作我们只是通过代码来演示如何使用NSData中的方法,这两个方法在操作文件时可能会失败,比如打开的文件不存在时我们从文件中读取数据的操作就会失败(表现为NSData为nil)。在实际的代码中并不推荐使用这种方式进行文件读写操作,后续我们会专门介绍如何读写文件。
最后我们对本章回的内容做一个总结:
- 1.NSData表示数据缓冲区,主要用来缓冲文件的输入和输出;
- 2.可以使用bytes来初始化NSData对象,或者从NSData中提供byte数据;
- 3.可以把NSData对象转换成NSString对象,方便调试或者打印显示;
- 4.使用NSData当作文件操作的缓冲区,不过不建议使用本文中提到的方法;
看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!
以上是关于Foundation框架中的NSData的主要内容,如果未能解决你的问题,请参考以下文章