【问题标题】:Android segmented downloadingAndroid分段下载
【发布时间】:2012-09-02 11:53:30
【问题描述】:

我还是 Android 的新手,所以我对它的库和 API 还不是很熟悉。

我的第一个主要项目是支持分段下载的下载管理器。我已经可以下载文件,但是我仍然不知道如何或从哪里开始分段下载。

我已经浏览了很多线程,但是我真的找不到任何关于Android分段下载的文章或线程。

谁能帮帮我?

【问题讨论】:

  • 搜索一些开源的android torrent客户端。

标签: android download segment


【解决方案1】:

这个帖子应该可以帮助你:link

想法是在请求的标头中使用 Content-Range 关键字(您联系的服务器必须能够管理它)

您可以从中汲取灵感的示例代码:

public String readFirstChunk(String urlString, int byteCount) {
    String text = null;
    if (urlString != null) {
        org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
        Request request = new Request(Method.GET, urlString);
        List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
        request.setRanges(ranges);
        Response response = restletClient.handle(request);
        if (Status.SUCCESS_OK.equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else {
            System.err.println("FAILED "+response.getStatus());
        }
    }
    return text;
}

private String processSuccessfulChunkRequest(Response response) {
    String text = null;
    try {
        text = response.getEntity().getText();
    } catch (IOException e) {
        throw new RuntimeException("Cannot download chunk", e);
    }
    return text;
}

【讨论】:

  • 这种分段下载的实现是否使用了android的下载管理器类?
【解决方案2】:

您应该研究Accept-Ranges 标头以及Android 中的HttpClient 类。

分段下载将只涉及通过使用 HttpClient 的请求在 Accept-Ranges 标头中发送不同的值,接收部分内容,然后将所有接收到的内容合并到一个文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多