当我们要从网络下载资源时,使用类似如下方法来获取InputStream实例:

URLConnection connection = new URL("http://www.XXXX.XXX").openConnection();
InputStream inputStream = connection.getInputStream();

但是这个InputStream实例与我们读取文件的InputStream实例有一些不同之处。

先说一下使用InputStream读取文件

InputStream inputStream = new FileInputStream(new File("XXX"));

我们可以通过inputStream.available()来获取文件的字节数

使用inputStream.read(byte[] b, int off, int len)来尝试读取len个字节到字节数组b中,如果输入流中的字节大于len,则读取len个数组,如果输入流中的字节数小于len,则读取剩余的字节个数,并最终返回读取的字节数,读取到文件结尾的时候会返回-1。

但是对于connection.getInputStream()方法获取的输入流,则以上两个方法就不适用了:

available()方法获取到的字节数会与输入流中的总字节数相差很大,如果要获取网络资源的具体字节数,就要使用connection.getContentLength()方法获取

而inputStream.read(byte[] b, int off, int len)方法,在字节数组b长度和len很大的时候,会出现读取不全的情况,即输入流中的字节数大于len个,但是读取出来的字节数仍小于len个的情况。所以这种情况就必须使用while循环读取,通过返回值来确定读取的字节数(读取文件的时候最好也这么做)

while ((length = inputStream.read(data, 0, data.length)) != -1) {
XXXX
}

最新文章

  1. pythonchallenge 解谜 Level 8
  2. linux下内存泄露检测工具Valgrind介绍
  3. 用 R 进行高频金融数据分析简介
  4. Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never
  5. Intellij Idea无法从Controller跳转到视图页面的解决方案
  6. codeforces round #201 Div2 A. Difference Row
  7. Hadoop之回收站
  8. C++ Primer : 第二章:变量和基本类型(1)
  9. 九度OJ 1010:计算A+B【字符串和数组】
  10. Show or Hide Menu List via ng-show
  11. 【转】DB2 常用命令
  12. 【风马一族_C】进制转化
  13. 用DIV+Css+Jquery 实现的旧版微信飞机大战。
  14. TCP和HTTP
  15. Alamofire网络库基础教程
  16. Oracle的substr函数
  17. C 标准I/O库粗略实现
  18. Python全栈之路----三元运算
  19. AliOS-Things linkkitapp解读
  20. mysql导入导出表

热门文章

  1. 2020ubuntu1804server编译安装redis5笔记(二)配置redis
  2. 2020Ubuntu server1804最新安装后的配置
  3. SQL之开窗函数详解--可代替聚合函数使用
  4. 【翻译】.NET 5 Preview 1 发布
  5. express模块中的req,res参数的常用属性方法
  6. js 实现简单的导航下拉列表
  7. Struts UI标签的使用
  8. CSS样式命名
  9. React利用Antd的Form组件实现表单功能(转载)
  10. 爬虫 | cnblog文章收藏排行榜(“热门文摘”)