我使用以下代码将nsdata转换为bytearray。它在模拟器中工作正常。在设备上,它将疯狂的内存分配到600 MB [在循环内的'addobject'行上]并崩溃。我正在阅读的文件大小为30 MB。我在输出窗口中看到的错误是“内存问题”。该文件是“zip”文件
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
const unsigned char *bytes = [data bytes];
NSUInteger length = [data length];
NSMutableArray *byteArray = [NSMutableArray array];
for (NSUInteger i = 0; i < length; i++) {
@autoreleasepool {
[byteArray addObject:[NSNumber numberWithUnsignedChar:bytes[i]]]; }
}
我在NSDictionary中使用这个bytearray并在字典上执行“dataWithJSONObject”以将json发布到REST Web服务。
答案 0 :(得分:0)
有关将NSData转换为字节数组的更高内存效率的方法,请参阅How to convert NSData to byte array in iPhone?
如果您的目标是最终将二进制数据发布到JSON中的Web服务,请尝试以下操作:
对于第二种方法,我可以想到两种方法:
Here is an example for the scenario of sending an image,但只要您可以将其加载到NSData对象中,任何文件类型都将起作用。
或者,这样的事情应该有效
NSData *data = [NSData dataWithContentsOfFile:file];
NSURL *url = [NSURL URLWithString:@"your_url_here"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
NSDictionary *headers = @{@"Content-Type": @"application/octet-stream"};
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:data]
// Use an URLSession object task to execute the request
最后,如果在编码和发送之前可以在客户端上压缩数据,那就更好了!
我希望你觉得这很有用。