本地測(cè)試
我在本地調(diào)用此方法獲取流的大小仑性,做文件下載
ClassPathResource cpr = new ClassPathResource("static" + File.separator + "empImport.xlsx");
//創(chuàng)建字節(jié)輸入流
InputStream in = cpr.getInputStream();
//available():獲取輸入流所讀取的文件的最大字節(jié)數(shù)
System.out.println(in.available());
byte[] body = new byte[in.available()];
//把字節(jié)讀取到數(shù)組中
in.read(body);
image.png
看著沒啥問題,本地測(cè)試通過了
線上測(cè)試
線上下載的文件內(nèi)容一直為空
image.png
之前一直找不到是什么問題,下載的文件沒有內(nèi)容,后來才發(fā)現(xiàn)是這個(gè)方法的問題瘤旨,長(zhǎng)度返回了0梯啤,所以導(dǎo)致內(nèi)容為空竖伯。
通過查看api,發(fā)現(xiàn)了些端倪因宇。該方法的描述是這樣的:返回可以不受阻塞地從此文件輸入流中讀取的字節(jié)數(shù)
如上七婴,由于是從網(wǎng)絡(luò)中獲取數(shù)據(jù),由于存在著網(wǎng)絡(luò)延遲等因素察滑,所以也就不難理解 兩次輸出不一致了打厘。
當(dāng)然,如果是讀取本地文件的話贺辰,這個(gè)方法返回的數(shù)據(jù)大小一般是真實(shí)的户盯。因此,如何使用以及要不要用這個(gè)方法饲化,得根據(jù)具體的場(chǎng)景
若想獲取網(wǎng)絡(luò)中流的總大小莽鸭,可以借助URLConnection方法
URLConnection openConnection = new URL("http://www.apache.org").openConnection();
System.out.println(openConnection.getContentLength());