NSData 的使用

应该说在任何网络中,如何使用数据来传递信息,保存和读取信息,并将其变为可以产生价值的东西,而在计算机的世界里面除了0 和 1 ,我们眼中所见的东西在计算机眼里只不过是一堆 0 和 1 数据而已。那么在 iOS 里,又是如何进行数据间的转化的。

初始化 NSData 类型的对象

//定义一个char类型的字符串  
const char * string = "Hi there ,this is a C string"; 

//建立缓冲区,把字符串添加进去  
NSData * data = [NSData dataWithBytes:string length:strlen(string)+1]; 

//获取APP根目录的方法
NSHomeDirectory();

//返回 data 的数据长度
NSLog(@"%ld", reader.length);


//返回data对象的首指针
NSLog(@"%s", reader.bytes);


//获取data格式的数据
NSLog(@"%@", reader.description);

NSString 类型的数据与 NSData 类型之间的转化

NSString * str = @"hello, world!";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; //NSString转换成NSData类型
NSString * newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSData 与 UIImage

//例:从本地文件沙盒中取图片并转换为NSData

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *name = [NSString stringWithFormat:@"ceshi.png"];
NSString *finalPath = [path stringByAppendingPathComponent:name];
NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
UIImage *aimage = [UIImage imageWithData: imageData];

base 64 编码解码

编码:

NSString * stringExample = [NSString stringWithFormat:@"I Love You"];
NSData * data1 = [stringExample dataUsingEncoding:NSUTF8StringEncoding];
NSString * base64String = [data1 base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]; 

解码:

NSData * dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];

文件保存和读取

 //定义一个字符串,保存一个路径  
NSString * path = @"/tmp/ver.txt"; 

//把这个保存路径的字符串保存到另一个文件中  encoding是编码  
[path writeToFile:@"/tmp/string.txt" atomically:YES encoding:NSASCIIStringEncoding error:nil];


//创建文件管理器     
NSFileManager * fm = [NSFileManager defaultManager]; 

//创建缓冲区,利用NSFileManager对象来获取文件中的内容,也就是这个文件的属性可修改  
NSData * fileData = [fm contentsAtPath:@"/tmp/ver.txt"];   

//获取上面fileData对象中通过NSFileManager对象获取的文件中的内容,然后再创建一个新的路径,并存储  
[fm createFileAtPath:@"/tmp/test4.txt" contents:fileData attributes:nil];

可修改的数据存储器 NSMutableData

创建的方式:

NSString *path = @"/Users/Allen/Desktop/test.dat";
NSString *temp = @"Jarod Yv";
int i = 100;
float f = 98.3333f; 

NSMutableData *writer = [[NSMutableData alloc] init];

[writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];
[writer appendBytes:&i length:sizeof(i)];
[writer appendBytes:&f length:sizeof(f)];

[writer writeToFile:path atomically:YES]; 

读取:     
int ii; 
float ff;
NSData *reader = [NSData dataWithContentsOfFile:path];

NSString *ttemp = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]encoding:NSUTF8StringEncoding];

[reader getBytes:&ii range:NSMakeRange([temp length], sizeof(ii))];
[reader getBytes:&ff range:NSMakeRange([temp length] + sizeof(ii), sizeof(ff))];