数十億の文字を含むテキストファイルを読み込もうとしています。この関数
contentOfFile
が原因でアプリケーションがクラッシュするため、この関数の使用は機能しません。
だから、誰かが私にサンプルコードを送って、私の要件に従ってチャンクを取得できるようにしてください。必要なものはどれでも、それだけを取得したいと思います。できる限り早くご回答ください。
数十億の文字を含むテキストファイルを読み込もうとしています。この関数
contentOfFile
が原因でアプリケーションがクラッシュするため、この関数の使用は機能しません。
だから、誰かが私にサンプルコードを送って、私の要件に従ってチャンクを取得できるようにしてください。必要なものはどれでも、それだけを取得したいと思います。できる限り早くご回答ください。
これはiOSアプリだと思います。その場合、contentsOfFile:
そのメソッドはファイルの内容全体を変数(メモリ)に読み込もうとしているため、を呼び出すことでメモリ制限に達している可能性があります。iOSではアプリを適切に再生する必要があり、メモリを大量に消費すると判断した場合、ウォッチドッグプロセスによってアプリが強制終了され、デバイスが再起動しないようになります(iOSデバイスにはスワップするディスクがないために発生します)。
ご覧になりましたNSFileHandle
か?NSFileHandle
テキスト内でのファイルの検索をサポートします。いくつかの簡単な反復で、次のメソッドを使用してファイル内を検索し、データのチャンクを読み取ることができます。
- (NSData *)readDataOfLength:(NSUInteger)length;
- (void)seekToFileOffset:(unsigned long long)offset;
こんな感じかもしれません。が読み込まれるテキストファイルへのパスを含むと仮定しpathToFile
ます。NSString
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];
私は以前に大量のファイルを開いたことがあり、それを行う方法があるはずなので、テキストエディットのソースを調べることをお勧めします。ただし、アプリがクラッシュする理由はわかりません。問題はないはずです。