zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    Spark面对OOM问题的解决方法及优化总结 (转载)
    spark rdd 宽窄依赖理解
    hive orc update
    hive sql 语句执行顺序及执行计划
    java 正则 贪婪匹配 匹配sql语句中的引号内容
    java 权重随机算法实现
    MySQL创建用户和加限权
    MySQL完整性约束
    MySQL基础操作与数据类型
    MySQL数据库初识
  • 原文地址:https://www.cnblogs.com/zawier/p/6539680.html
Copyright © 2011-2022 走看看