版本
Xcode 8.2.1
簡(jiǎn)介
NSData為二進(jìn)制數(shù)據(jù),在文件操作(如保存到本地)、網(wǎng)絡(luò)、以及核心圖形圖像中使用較廣泛。
NSData的創(chuàng)建
//對(duì)象方法創(chuàng)建
NSData *data1 = [[NSData alloc] init];
NSData *data2 = [[NSData alloc] initWithData:data1];
//類方法創(chuàng)建
NSData *data3 = [NSData data];
NSData *data4 = [NSData dataWithData:data3];
//由文件創(chuàng)建
NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];
NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];
NSData *data6 = [NSData dataWithContentsOfFile:filePath];
// 由 URL 創(chuàng)建
NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]]];
NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];
NSData *data8 = [NSData dataWithContentsOfURL:urlPath];
// 由 字符串 創(chuàng)建
NSString *string = @"bei jing nin hao";
NSData *data9 = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData *data10 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
// 可變 NSData 的創(chuàng)建
// 初始化時(shí)指定對(duì)象擁有的字節(jié)空間大小,在需要時(shí)會(huì)增加內(nèi)存空間,在初始化時(shí)并沒(méi)有分配內(nèi)存空間
NSMutableData *data11 = [[NSMutableData alloc] initWithCapacity:5];
NSMutableData *data12 = [NSMutableData dataWithCapacity:5];
// 初始化時(shí)為對(duì)象分配指定長(zhǎng)度的歸零字節(jié)
NSMutableData *data13 = [[NSMutableData alloc] initWithLength:10];
NSMutableData *data14 = [NSMutableData dataWithLength:10];
注:以上代碼原文地址http://www.cnblogs.com/QianChia/p/5782732.html#_label0
NSData與NSString、Byte、UIImage之間的轉(zhuǎn)換
//NSString 轉(zhuǎn)換成 NSData
NSString *str = @"Hello";
NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
//NSData 轉(zhuǎn)換成 NSString
NSString *str1 = [[NSString alloc]initWithData:strData encoding:NSUTF8StringEncoding];
//Byte 轉(zhuǎn)換成 NSData
Byte byte[] = {1,2,3,4,5,6,7,8,9,10};
NSData *byteData = [[NSData alloc] initWithBytes:byte length:10];
//NSData 轉(zhuǎn)換成 Byte
Byte *testByte = (Byte *)[byteData bytes];
//UIImage 轉(zhuǎn)換成 NSData
NSData *imageData1 = UIImagePNGRepresentation(UIImage *image); //png 格式
NSData *imageData2 = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality) //jpeg格式
//NSData 轉(zhuǎn)換成 UIImage
UIImage *aimage = [UIImage imageWithData: imageData];
NSMutableData刪除部分?jǐn)?shù)據(jù)
實(shí)驗(yàn)
Byte byte[] = {1, 2 , 3, 4, 5};
NSMutableData *dataM = [[NSMutableData alloc] initWithBytes:byte length:5];
NSLog(@"原數(shù)據(jù) length:%d, dataM:%@", (int)dataM.length, dataM);
[dataM resetBytesInRange:NSMakeRange(0, 3)]; // 替換成0, 長(zhǎng)度不變
NSLog(@"reset操作 length:%d, dataM:%@", (int)dataM.length, dataM);
[dataM replaceBytesInRange:NSMakeRange(0, 2) withBytes:NULL length:0]; // 長(zhǎng)度改變, 真正刪除
NSLog(@"replace操作 length:%d, dataM:%@", (int)dataM.length, dataM);刪除
NSLog(@"replace操作 length:%d, dataM:%@", (int)dataM.length, dataM);
log:
原數(shù)據(jù) length:5, dataM:{length = 5, bytes = 0x0102030405}
reset操作 length:5, dataM:{length = 5, bytes = 0x0000000405}
replace操作 length:3, dataM:{length = 3, bytes = 0x000405}
結(jié)論:
// NSMutableData刪除部分?jǐn)?shù)據(jù)
[dataM replaceBytesInRange:NSMakeRange(0, 2) withBytes:NULL length:0];