美文网首页
inputstream中使用available方法获取流大小问题

inputstream中使用available方法获取流大小问题

作者: 半日孤独 | 来源:发表于2021-08-09 17:12 被阅读0次

本地测试

我在本地调用此方法获取流的大小,做文件下载

        ClassPathResource cpr = new ClassPathResource("static" + File.separator + "empImport.xlsx");
        //创建字节输入流
        InputStream in = cpr.getInputStream();
        //available():获取输入流所读取的文件的最大字节数
        System.out.println(in.available());
        byte[] body = new byte[in.available()];
        //把字节读取到数组中
        in.read(body);
image.png

看着没啥问题,本地测试通过了

线上测试

线上下载的文件内容一直为空


image.png

之前一直找不到是什么问题,下载的文件没有内容,后来才发现是这个方法的问题,长度返回了0,所以导致内容为空。

通过查看api,发现了些端倪。该方法的描述是这样的:返回可以不受阻塞地从此文件输入流中读取的字节数
如上,由于是从网络中获取数据,由于存在着网络延迟等因素,所以也就不难理解 两次输出不一致了。
当然,如果是读取本地文件的话,这个方法返回的数据大小一般是真实的。因此,如何使用以及要不要用这个方法,得根据具体的场景
若想获取网络中流的总大小,可以借助URLConnection方法
URLConnection openConnection = new URL("http://www.apache.org").openConnection(); 
System.out.println(openConnection.getContentLength());

相关文章

网友评论

      本文标题:inputstream中使用available方法获取流大小问题

      本文链接:https://www.haomeiwen.com/subject/tmgzvltx.html