如何从一个巨大的文本文件中读取文本块?

时间:2011-09-20 11:41:26

标签: objective-c file-handling nsfilehandle

我正在尝试阅读包含数十亿字符的文本文件。使用该功能 contentOfFile无效,因为我的应用程序因此而崩溃。

所以任何人都可以给我发送示例代码,以便根据我的要求获得大块。无论我需要什么,我只想获得那个。 请尽快回复。

2 个答案:

答案 0 :(得分:14)

我猜这是一款iOS应用。在这种情况下,您可能通过调用contentsOfFile:来达到内存限制,因为该方法试图将文件的全部内容读入变量(内存)。请记住,在iOS上你的应用程序必须运行良好,如果它决定消耗太多内存,那么监视程序进程将终止你的应用程序以防止设备重启(这是因为没有磁盘可以在iOS设备上交换)。 / p>

你看过NSFileHandle了吗? NSFileHandle支持在文本中搜索文件。通过一些简单的迭代,您可以使用以下方法在文件中搜索并读取数据块:

- (NSData *)readDataOfLength:(NSUInteger)length;
- (void)seekToFileOffset:(unsigned long long)offset;

它可能看起来像这样。假设pathToFileNSString,其中包含要读入的文本文件的路径。

uint64 offset = 0;
uint32 chunkSize = 1024;     //Read 1KB chunks.
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:pathToFile];
NSData *data = [handle readDataOfLength:chunkSize];

while ([data length] > 0)
{
     //Make sure for the next line you choose the appropriate string encoding.
     NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];

     /* PERFORM STRING PROCESSING HERE */

     /* END STRING PROCESSING */
     offset += [data length];

     [handle seekToFileOffset:offset];
     data = [handle readDataOfLength:chunkSize];
}

[handle closeFile];

答案 1 :(得分:1)

一个好主意是查看textedit源代码,因为我之前已经用它打开了大量文件,应该有办法做到这一点。不知道为什么你的应用程序崩溃了。它不应该有问题。

相关问题