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

2021-08-09  本文已影响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());
上一篇 下一篇

猜你喜欢

热点阅读