NSData

簡介

  • NSData是用來包裝數(shù)據(jù)的,NSData存儲的是二進制數(shù)據(jù),屏蔽了數(shù)據(jù)之間的差異,文本、音頻、圖像等數(shù)據(jù)都可用NSData來存儲。在多媒體開發(fā)時,比較常用,例如拼接音頻、圖片。
字符串與NSData
  • 字符串 -->NSData
 NSString *aString = @"http://www.baidu.com";
 NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
  • NSData -->字符串
  NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];
Byte與NSData
  • NSData --> Byte
 NSString *testString = @"1234567890";
 NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];  
 Byte *testByte = (Byte *)[testData bytes];
  • Byte --> NSData
Byte byte[] = {0,1,2,3,4,5,6,7};
NSData *adata = [[NSData alloc] initWithBytes:byte length:8];
NSData -->UIImage
  • NSData --> UIImage
 UIImage *aImage = [UIImage imageWithData: imageData];
  • 例:從本地文件沙盒中取圖片并轉(zhuǎn)換為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];
// 
NSData *imageData = UIImageJPEGRepresentation(image, compressionQuality);

NSData *imageData = UIImagePNGRepresentation(aimae);
  • NSData與 NSMutableData
NSData *data=[[NSData alloc]init];
NSMutableData *mData=[[NSMutableData alloc]init]; 
mData=[NSData dataWithData:data];

通過NSData 和 NSKeyedArchive 實現(xiàn)一個文件歸檔多個對象

  • 使用archiveRootObject:toFile:方法可以將一個對象直接寫入到一個文件中
  • 但有時候可能想將多個對象寫入到同一個文件中
  • 那么就要使用NSData來進行歸檔對象

實現(xiàn)原理

  • 利用NSData為一些數(shù)據(jù)提供臨時存儲空間
    • 以便隨后寫入文件,或者存放從磁盤讀取的文件內(nèi)容
    • 可以使用[NSMutableData data]創(chuàng)建可變數(shù)據(jù)空間
屏幕快照 2016-06-08 下午3.42.15.png

實例操作

歸檔(編碼)

// 新建一塊可變數(shù)據(jù)區(qū)
NSMutableData *data = [NSMutableData data];

// 將數(shù)據(jù)區(qū)連接到一個NSKeyedArchiver對象
NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];

// 開始存檔對象,存檔的數(shù)據(jù)都會存儲到NSMutableData中
[archiver encodeObject:person1 forKey:@"person1"];
[archiver encodeObject:person2 forKey:@"person2"];

// 存檔完畢(一定要調(diào)用這個方法)
[archiver finishEncoding];

// 將存檔的數(shù)據(jù)寫入文件
[data writeToFile:path atomically:YES];

NSData-從同一文件中恢復(fù)2個Person對象
恢復(fù)(解碼)

// 從文件中讀取數(shù)據(jù)
NSData *data = [NSData dataWithContentsOfFile:path];

// 根據(jù)數(shù)據(jù),解析成一個NSKeyedUnarchiver對象
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

Person *person1 = [unarchiver decodeObjectForKey:@"person1"];
Person *person2 = [unarchiver decodeObjectForKey:@"person2"];

// 恢復(fù)完畢
[unarchiver finishDecoding];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容