本地测试
我在本地调用此方法获取流的大小,做文件下载
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);
看着没啥问题,本地测试通过了
线上测试
线上下载的文件内容一直为空
之前一直找不到是什么问题,下载的文件没有内容,后来才发现是这个方法的问题,长度返回了0,所以导致内容为空。
通过查看api,发现了些端倪。该方法的描述是这样的:返回可以不受阻塞地从此文件输入流中读取的字节数
如上,由于是从网络中获取数据,由于存在着网络延迟等因素,所以也就不难理解 两次输出不一致了。
当然,如果是读取本地文件的话,这个方法返回的数据大小一般是真实的。因此,如何使用以及要不要用这个方法,得根据具体的场景
若想获取网络中流的总大小,可以借助URLConnection方法
URLConnection openConnection = new URL("http://www.apache.org").openConnection();
System.out.println(openConnection.getContentLength());