Java 使用InputStream笔记
2024-10-09 00:06:52
当我们要从网络下载资源时,使用类似如下方法来获取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
}
最新文章
- pythonchallenge 解谜 Level 8
- linux下内存泄露检测工具Valgrind介绍
- 用 R 进行高频金融数据分析简介
- Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never
- Intellij Idea无法从Controller跳转到视图页面的解决方案
- codeforces round #201 Div2 A. Difference Row
- Hadoop之回收站
- C++ Primer : 第二章:变量和基本类型(1)
- 九度OJ 1010:计算A+B【字符串和数组】
- Show or Hide Menu List via ng-show
- 【转】DB2 常用命令
- 【风马一族_C】进制转化
- 用DIV+Css+Jquery 实现的旧版微信飞机大战。
- TCP和HTTP
- Alamofire网络库基础教程
- Oracle的substr函数
- C 标准I/O库粗略实现
- Python全栈之路----三元运算
- AliOS-Things linkkitapp解读
- mysql导入导出表