在我的应用程序中,我有大约300个NSData大小为0.5 MB的对象,我将它们全部按顺序编写到一个文件中,基本上是这个代码(写入一个0.5 MB的对象300次):
- (void)createFile {
// create .5 MB block to write
int size = 500000;
Byte *bytes = malloc(size);
for (int i = 0; i < size; i++) {
bytes[i] = 42;
}
NSData *data = [NSData dataWithBytesNoCopy:bytes length:size
freeWhenDone:YES];
// temp output file
NSUUID *uuid = [NSUUID UUID];
NSString *path = [[NSTemporaryDirectory()
stringByAppendingPathComponent:[uuid UUIDString]]
stringByAppendingPathExtension:@"dat"];
NSOutputStream *outputStream = [[NSOutputStream alloc]
initToFileAtPath:path append:NO];
[outputStream open];
double startTime = CACurrentMediaTime();
NSInteger totalBytesWritten;
NSInteger bytesWritten;
Byte *readPtr;
for (int i = 0; i < 300; i++) {
// reset read pointer to block we're writing to the output
readPtr = (Byte *)[data bytes];
totalBytesWritten = 0;
// write the block
while (totalBytesWritten < size) {
bytesWritten = [outputStream write:readPtr maxLength:size
- totalBytesWritten];
readPtr += bytesWritten;
totalBytesWritten += bytesWritten;
}
}
double duration = CACurrentMediaTime() - startTime;
NSLog(@"duration = %f", duration);
[outputStream close];
}
Run Code Online (Sandbox Code Playgroud)
在我的iPod(第5代)和我的iPhone 6上,这个过程大约需要3秒钟,我想知道是否有更快的方法来做到这一点.我尝试过使用NSFileManager和NSFileHandle接近,但它们花费的时间大致相同,这使我认为这是我遇到的基本I/O限制.
有没有办法更快地执行此操作(此代码应在任何设备上编译和运行)?