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当作文件操作的缓冲区,不过不建议使用本文中提到的方法;


看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

猜你喜欢

转载自blog.csdn.net/talk_8/article/details/121059960