Java 使用InputStream笔记
当我们要从网络下载资源时,使用类似如下方法来获取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
}
Java 使用InputStream笔记的更多相关文章
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Android(java)学习笔记211:采用httpclient提交数据(qq登录案例)
1.Apache -Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包 ...
- Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)
1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...
随机推荐
- Nginx之负载均衡配置(二)
前文我们聊到了nginx作为负载均衡的配置,前端nginx作为调度器调度http或https请求,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12458159 ...
- Java多线程并发03——在Java中线程是如何调度的
在前两篇文章中,我们已经了解了关于线程的创建与常用方法等相关知识.接下来就来了解下,当你运行线程时,线程是如何调度的.关注我的公众号「Java面典」了解更多 Java 相关知识点. 多任务系统往往需要 ...
- 【Python】2.16学习笔记 运算符,位运算符,if-else语句
复合运算符 a *= b # a = a * b a += b # a = a + b a -= b # a = a - b ... 位运算符 对数字进行二进制运算 按位与 &,二进制位都为一 ...
- ipadmini从9.3.5降级8.4.1并完美越狱
ipadmini之前是iOS9.3.5实在是卡的用不了,于是打算降级,但是尝试了包括改版本描述等很多方法一直失败.今天突然成功降级8.4.1并且完美越狱,运行流畅了非常多.赶紧发个教程,回馈一下网友. ...
- JVM的组成
JVM一共有五大区域,程序计数器.虚拟机栈.本地方法栈.Java堆.方法区. 程序计数器 程序技术器是一块很小的内存空间,由于Java是支持多线程的.当线程数大于CPU数量时,CPU会按照时间片轮寻执 ...
- java-字节流练习(新手)
参考手册: 关键字: FileInputStream() Input是从硬盘到内存 FileOutputStream() 而output是从内存到硬盘,所以实现了复制粘贴. read() 调用方法读取 ...
- 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!
作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...
- Ubuntu和Windows双系统修复
一. 感受 新买了电脑从头安装win10和ubuntu双系统,踩了各种坑,终于是成功了. 大致流程是用老毛桃安装了window10系统,装在了固态硬盘上.随后用软碟通将Ubuntu系统写入U盘(先用老 ...
- Linux_virtualenv常用命令
创建虚拟环境:mkvirtualenv -p python3 虚拟环境名称,创建后默认进入虚拟环境 查看当前虚拟环境安装的python包:pip list 查看已经创建的虚拟环境:workon + 两 ...
- Mac下 eclipse target runtime com.genuitec.runtime 解决方法
Mac下 eclipse target runtime com.genuitec.runtime 解决方法 解决步骤如下: 首先是找到工程项目一个名叫.settings的文件夹,里面有个叫 org.e ...