记多线程下载

URL:同一个URL对象可以多次openConnection()返回多个connection,但是一个connection调用getInputStream(),总是返回同一个inputStream。

URLConnection.setRequestProperty(String key,String value),设置请求属性,可以设置每个线程下载的部分,格式setRequestProperty("Range", "bytes=" + startPos + "-" + endPos)。这里的key和value应该还有其他的用途,留个坑。

read():从URLConnection获得的inputStream的read()方法并不能确保读满buffer或指定的长度,而read的返回值是此次read()的长度,所以要放在while循环中直到读满所要的长度为止,现在还不知道为什么这样设计,只是觉得很不方便。又是一个坑。

主线程等待下载完成:一开始executorService.isTerminated()判断是否所有线程都下载完成,不完成则阻塞主线程。后来用CountDownLatch更优雅的实现此功能,CyclicBarrier同样也能完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 一.DownloadManager的介绍 1.Android涉及到的网络数据请求,如果是零星数据、且数据量较小(...
    少年的大叔心阅读 2,271评论 0 5
  • 前言 多年以前自学Java,在本地做了一些笔记。最近几年流行播客,一方面防止丢失,一方面可以帮助其他小伙伴...
    chaohx阅读 1,044评论 0 3
  • 村子里很多农户都种上了荷兰豆,老何也执意种上了,说是去年卖了近千元,今年多种了些,我们用了两个周未假日才搭完八排棚...
    川卜一阅读 565评论 0 2