我想读取已经旋转到bz2文件的日志文件的内容。如何尽可能少地使用内存?
答案 0 :(得分:1)
我只是想出了这些脚本: http://www.cocoadev.com/index.pl?BzipValueTransformer& http://www.cocoadev.com/index.pl?NSDataPlusBzip
您需要做的是包含我在libbz2.a
中找到的/opt/local/lib/libbz2.a
,因为我使用macports安装了bzip2
。我将文件拖入我的项目并编写代码:
- (void)bunzip
{
NSString *path = @"/var/log/kernel.log.1.bz2";
NSData *data = [NSData dataWithContentsOfFile:path];
NSString *dataString = [[Bzip2ValueTransformer alloc] transformedValue:data];
NSLog(@"Data: %@", dataString);
}
结果:
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: wlEvent: en1 en1 Link UP
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: AirPort: Link Up on en1
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: en1: BSSID changed to 32:7b:98:82:9d:7f
Dec 16 23:30:10 paul-peelens-macbook-pro newsyslog[13862]: logfile turned over due to size>1000K
答案 1 :(得分:0)
我使用NSTask或my own PRHTask打开bunzip2进程,其标准输入连接到bzip2文件,其标准输出设置为管道。使用NSFileHandle的异步读取或GCD的dispatch_source
在数据输入时从后台读取该管道。