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

rpt*_*thi 2 objective-c file-handling nsfilehandle

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

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

Car*_*ter 14

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

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

- (NSData *)readDataOfLength:(NSUInteger)length;
- (void)seekToFileOffset:(unsigned long long)offset;
Run Code Online (Sandbox Code Playgroud)

它可能看起来像这样.假设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];
Run Code Online (Sandbox Code Playgroud)