【问题标题】:How to accelerate downloads using Cocoa API如何使用 Cocoa API 加速下载
【发布时间】:2012-02-12 20:03:56
【问题描述】:

我正在开发一个用 Cocoa 编写的简单下载管理器,实际上我使用 NSURLDownload 来实现这一点。问题是我猜NSURLDownload 只从一个段下载文件,我知道其他下载管理器会为多个段下载文件以提高下载性能。

其实我觉得还是要把我要下载的文件拆分成多个segment,同时下载所有这些segment。

问题是我不知道该怎么做。我已经在互联网上搜索了很多没有任何成功。


编辑:这是一个可行的解决方案,感谢 nacho4d 帮助:

NSURL *downloadURL = [NSURL URLWithString:@"http://www.urltodownload.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 1000.0];
int fromByte = 0;
int toByte = 1000;
NSString *range = [NSString stringWithFormat:@"bytes=%i-%i", fromByte, toByte];
[request setValue:range forHTTPHeaderField:@"Range"];
[[NSURLDownload alloc] initWithRequest:request delegate:self];

【问题讨论】:

    标签: cocoa download


    【解决方案1】:

    我不知道确切的答案,但如果您看到 Java example,您会看到您可以在 HTTPConnection 对象中添加“范围”属性来选择要下载的部分:

    // Specify what portion of file to download.
    connection.setRequestProperty("Range",
            "bytes=" + downloaded + "-");
    

    我认为这是一个提示,也许NSURLRequestNSURLConnection 等中有一个地方可以放置这个“范围”属性:)

    假设这是可能的,我认为您需要同时进行 n 个连接,并在所有连接完成后将所有内容放在一起。

    如果你找到确切的答案,我也很高兴知道:)

    希望对你有帮助。

    【讨论】:

    • 感谢您的帮助。事实上,可以在 NSMutableURLRequest 对象中指定范围。这是一个小例子:NSURL *downloadURL = [NSURL URLWithString:@"http://www.urltodownload.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 1000.0]; int fromByte = 0; int toByte = 1000; NSString *range = [NSString stringWithFormat:@"bytes=%i-%i", fromByte, toByte]; [request setValue:range forHTTPHeaderField:@"Range"]; [[NSURLDownload alloc] initWithRequest:request delegate:self];
    • 它正在工作。谢谢你。我还有一个问题要问你,你认为在同一时间用 n 个线程写入文件的最佳方法是什么?
    • 这里有几个选项,最简单的是:使用 for 循环启动所有 NSURLDownloads,当所有代表都说他们已经完成时,您使用 NSData 将所有部分放在一起。 (我认为应该有一种将所有东西放在一起的最佳方法:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多