当你 进行文件操作时,你 经常需要将 数据 读取 到一个临时的存储空间。这样的临时存储空间 一般 叫做 缓冲区。将搜集好的数据 写入 文件时,也要用到 这样的存储空间。基础框架中的NSData这类物件 提供了 一种非常容易的办法 来创建 缓冲区。你 可以将 文件的内容 写入 缓冲区,也可以将 缓冲区的内容
写入 文件。对于 32位应用程序,NSData类型的物件 可以容纳 2GB数据,对于 64位应用程序,NSData类型的物件 可以容纳 80亿GB的数据!
NSData这类物件 也分为 可修改 和 不可修改两种,它们 分别 是 NSData 和 NSMutableData。
下面的程序 示范了 如何将 文件中的内容 读取到 内存中的缓冲区里。在运行 下面的程序之前,可执行文件所在的目录 已经有 一个叫newfile2的文件了:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSFileManager.h> #import <Foundation/NSAutoreleasePool.h> #import <Foundation/NSData.h> int main(int argc,const char *argv[]) { NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; NSFileManager *myFileManager; NSData *myBuffer; myFileManager=[NSFileManager defaultManager]; //读取文件newfile2 myBuffer=[myFileManager contentsAtPath:@"newfile2"]; if(myBuffer==nil) { NSLog(@"读取文件失败!"); return 1; } //创建文件newfile3,并将数据写入其中 if([myFileManager createFileAtPath:@"newfile3" contents:myBuffer attributes:nil]==NO) { NSLog(@"复制文件失败!"); return 2; } NSLog(@"复制文件成功!"); [pool drain]; return 0; } |
执行 这个程序后,可以得到 这样的结果。
|
2012-05-09 14:47:04.538 Sample[2280:707] 复制文件成功!
Program ended with exit code: 0
|
同时,可执行文件所在的目录中 增加了 newfile3这个文件:

这个程序中的
| myBuffer=[myFileManager contentsAtPath:@"newfile2"]; |
这行语句 对 物件myFileManager 采取了 contentsAtPath:这项措施,将 参数所代表的当前目录中的文件newfile2的内容 读取出来,并且 写入 缓冲区,也就是 NSData类型的物件myBuffer。如果 这项操作 失败,那么 缓冲区myBuffer 就为 空。
接着
|
[myFileManagercreateFileAtPath:@"newfile3"contents:myBufferattributes:nil]
|
这行语句中 对myFileManager这个物件 采取了 createFileAtPath:contents:attributes:这项措施,从而 在当前目录中 创建 一个名为newfile3的文件,并且 将 缓冲区myBuffer中的数据 写入 这个文件。如果 这项操作 失败,就会产生出 结果NO。