首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时并按顺序从2台服务器下载块- Android

同时并按顺序从2台服务器下载块- Android
EN

Stack Overflow用户
提问于 2013-05-14 20:11:15
回答 1查看 719关注 0票数 3

我正在开发一个安卓应用程序,目的是从2台服务器上下载代码块(视频文件的一部分),在每个服务器下载后,按顺序将它们附加到一个主要视频文件中,最后在继续下载时播放这个视频文件。

当下载是通过使用执行下载的两个不同的线程(每个服务器一个)来完成串行下载时,这是很好的。我想知道如何实现上述目标,但通过并发下载,而不是串行下载。

也就是说,同时按顺序从服务器上下载块。例如,在同一时间内从server1下载chunk0、chunk1和chunk2 (比方说比server2快3倍)和从server2下载chunk3,因此在这段时间内我们完全使用了2台服务器的所有可用带宽。这个过程会重复,直到下载所有的块。

正如我前面所说,通过使用线程和连接,下载是串行的。为了使其并发,我尝试从每个线程中删除联接,但是它不按顺序下载块,也只从一台服务器下载,而不是从两台服务器下载。AsyncTask不是一个解决方案,因为它也不按顺序下载块。

那么,是否有任何方法可以实现并发和,以便像我前面描述的那样对块进行下载?有没有人做过这样的项目,以便确切地知道答案?

EN

回答 1

Stack Overflow用户

发布于 2013-07-24 04:53:45

您可以在下载加速器中使用流行的技术。

通常,其想法是使用Range HTTP报头从每个服务器请求块。(当服务器能够相应地处理范围标头时,服务器会响应Accept-Ranges报头)。(这个博客对此有很好的解释。)。

每个线程/可运行/可调用必须知道哪个块是它的责任(第一个字节位置+长度?)因为每个人都必须在文件中写自己的部分。

然后作出决定,你可以:

  1. 在每个线程中使用RandomAccessFile实例编写文件,明显地将文件指针定位在其块的第一个字节位置(与寻觅法一起),或..
  2. 确保您有一个唯一的工作线程(请参阅遗嘱执行人提交),它负责编写每个线程所告诉的字节。在编写时,您将使用“寻求”将文件指针移动到正确的位置,不会出现重叠的错误。

注意:如果您希望能够在有第一个块时开始播放,则可以在第一个块线程download+write完成后执行该代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16551987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档