数据对象(data object):
二进制数据能被包装进Foundation和Core Foundation数据对象中,数据对象提供了操作数据的面向对象封装。
数据对象是桥接对象(bridged objects),所以你能在Foundation和Core Foundation中自由切换。数据对象
能自动的分配和回收数据缓冲区。数据对象(data objects)还能被存储在集合中,能被写入属性列表,存入文件,通过通信端口传输等。
数据对象的应用:
从原始字节(raw bytes)创建数据对象
一般用以data开头的NSData或NSMutableData类方法创建包含这些原始字节的数据对象。
从文件和URLs中创建对象:
用dataWithContentsOfFile:
or dataWithContentsOfURL:类方法创建数据对象,数据对象中包含文件或者URL的内容
NSString *thePath = @"/u/smith/myFile.txt";
NSData *myData = [NSData dataWithContentsOfFile:thePath];
NSData的两个原始bytes和length方法为类的其他方法提供了基础。
bytes返回一个指向包含数据的数据对象。length方法返回数据对象包含的字节数量。
NSData提供了从一个数据对象中访问字节或者拷贝字节到指定缓冲区的方法。getBytes:方法拷贝所有的
字节到一个缓冲区。
unsigned char aBuffer[20];
NSString *myString = @"Test string.";
const char *utfString = [myString UTF8String];
NSData *myData = [NSData dataWithBytes: utfString length: strlen(utfString)];
[myData getBytes:aBuffer];
抽取一个数据对象的内容是否是另外数据对象的子集:
NSString *myString = @"ABCDEFG";
const char *utfString = [myString UTF8String];
NSRange range = {2, 4};
NSData *data1, *data2;
data1 = [NSData dataWithBytes:utfString length:strlen(utfString)];
data2 = [data1 subdataWithRange:range];
存储数据对象:
writeToFile:atomically:把数据存储到一个本地文件中
和 writeToURL:atomically:把数据存储到指定的网络地方。
可变数据对象:NSMutableData
改变bytes
NSMutableData *data1, *data2;
NSString *myString = @"string for data1";
NSString *yourString = @"string for data2";
const char *utfMyString = [myString UTF8String];
const char *utfYourString = [yourString UTF8String];
unsigned char *firstBuffer, secondBuffer[20];
/* initialize data1, data2, and secondBuffer... */
data1 = [NSMutableData dataWithBytes:utfMyString length:strlen(utfMyString)+1];
data2 = [NSMutableData dataWithBytes:utfYourString length:strlen(utfYourString)+1];
[data2 getBytes:secondBuffer];
NSLog(@"data2 before: \"%s\"\n", (char *)secondBuffer);
firstBuffer = [data2 mutableBytes];
[data1 getBytes:firstBuffer];
NSLog(@"data1: \"%s\"\n", (char *)firstBuffer);
[data2 getBytes:secondBuffer];
NSLog(@"data2 after: \"%s\"\n", (char *)secondBuffer);
在bytes后加入
NSMutableData *data1, *data2;
NSString *firstString = @"ABCD";
NSString *secondString = @"EFGH";
const char *utfFirstString = [firstString UTF8String];
const char *utfSecondString = [secondString UTF8String];
unsigned char *aBuffer;
unsigned len;
data1 = [NSMutableData dataWithBytes:utfFirstString length:strlen(utfFirstString)];
data2 = [NSMutableData dataWithBytes:utfSecondString length:strlen(utfSecondString)];
len = [data2 length];
aBuffer = malloc(len);
[data2 getBytes:aBuffer];
[data1 appendBytes:aBuffer length:len];
置换bytes
NSMutableData *data1, *data2;
NSString *myString = @"Liz and John";
NSString *yourString = @"Larry";
const char *utfMyString = [myString UTF8String];
const char *utfYourString = [yourString UTF8String];
unsigned len;
unsigned char *aBuffer;
NSRange range = {8, strlen(utfYourString)};
data1 = [NSMutableData dataWithBytes:utfMyString length:strlen(utfMyString)];
data2 = [NSMutableData dataWithBytes:utfYourString length:strlen(utfYourString)];
len = [data2 length];
aBuffer = malloc(len);
[data2 getBytes:aBuffer];
[data1 replaceBytesInRange:range withBytes:aBuffer];