java.net.*下的相关问题 取得inputStream的长度

以前在我们初学File和inputStream和outputStream时,有需要将文件从一个文件夹复制到另一个文件夹中,这时候我们用的就是inputStream.available()来获取文件的总大小,而且屡试不爽。

但是当我们要从网络URL中下载一个文件时,我们发现得到的数值并不是需要下载的文件的总大小。

java.net.*下的相关问题 取得inputStream的长度_第1张图片
HttpURLConnection获取的大小和.getInputStream()出来的大小是不一样的

要从网络中下载文件时,我们知道网络是不稳定的,也就是说网络下载时,read()方法是阻塞的,说明这时我们用

inputStream.available()获取不到文件的总大小。

但是从本地拷贝文件时,我们用的是FileInputStream.available(),难道它是将先将硬盘中的数据先全部读入流中?

然后才根据此方法得到文件的总大小?

FileInputStream源代码表明

是通过文件描述符获取文件的总大小,而并不是事先将磁盘上的文件数据全部读入流中,再获取文件总大小。

所以获取网络下载的文件的大小要用httpconn.getContentLength();


本地文件用:

InputStream inputStream =urlCon.getInputStream();

inputStream.available();

网络文件用:

URL url =newURL(strUrl);

HttpURLConnection httpconn =(HttpURLConnection)url.openConnection();

httpconn.getContentLength();

你可能感兴趣的:(java.net.*下的相关问题 取得inputStream的长度)