我正在写一个Mp3播放器。我从服务器下载mp3文件。文件已加密。我客户的加密方法非常简单。它们只是每X字节插入一个位。像代码中的323。但解密过程需要很长时间。 CPU使用量是巨大的?为什么?我该怎么办?
_mappedData = [[NSMutableData dataWithMappedContentsOfFile:_cachedPath] mutableCopy];
Singleton *singleton = [Singleton sharedSingleton];
NSLog(@"Decryption started");
if(singleton.playerMode == PLAYERMODELISTEN)
{
int i = 323;
while (i < [_mappedData length]) {
[_mappedData replaceBytesInRange:NSMakeRange(i, 1) withBytes:NULL length:0];
//CFDataDeleteBytes((CFMutableDataRef)_mappedData, CFRangeMake(i, 1000));
i += 323;
}
}
[General dismissGlobalHUD];
NSLog(@"Decryption completed");
答案 0 :(得分:1)
最后我自己解决了这个问题。
NSMutableData *decryptedData = [[NSMutableData alloc] init];
NSUInteger length = [_mappedData length];
NSUInteger chunkSize = 500;
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[_mappedData bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += (thisChunkSize + 1);
[decryptedData appendData:chunk];
} while (offset < length);
_mappedData = decryptedData;
这是我的解决方案。工作得非常快。