Java 使用InputStream笔记

Posted _路上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Java笔记-解决读取文件时中文乱码问题(InputStreamReader设置编码)

Java 复制克隆(clone)InputStream的方法及示例代码

Java基础笔记(三:文件与数据流)

代码笔记Java深入学习——实现客户端发送文件到服务器的文件传输