Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android URL中的文件大小与存储中的下载文件不同_Android_Url_Filesize_Download - Fatal编程技术网

Android URL中的文件大小与存储中的下载文件不同

Android URL中的文件大小与存储中的下载文件不同,android,url,filesize,download,Android,Url,Filesize,Download,我正在尝试使用异步任务从URL下载文件。在doInBackground()方法中,我检索文件大小,如下所示 lenghtOfFile = conection.getContentLength(); 这将返回一个整数值。现在,下载继续,文件完全下载并写入SD卡 问题是,在我的postExecute()中,我想比较URL中的文件大小和下载的文件大小 @Override protected void onPostExecute(String s) { supe

我正在尝试使用异步任务从URL下载文件。在doInBackground()方法中,我检索文件大小,如下所示

    lenghtOfFile = conection.getContentLength();
这将返回一个整数值。现在,下载继续,文件完全下载并写入SD卡

问题是,在我的postExecute()中,我想比较URL中的文件大小和下载的文件大小

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        //check if the file was download and know how much of it
        //was downloaded, so as to update ui accordingly
        if(file.exists()){

            Log.e("apiFileSize", String.valueOf(lenghtOfFile));
            Log.e("downloadFileSize", String.valueOf(file.length()));

            //check if the file was completely downloaded
            if(lenghtOfFile == file.length()){
                     ....
如您所见,我记录了这两个值,但它们并不相等,即使下载已结束,文件已完全下载。本地存储(SD卡)中的文件最终大于url中的文件大小。我希望他们平等,为什么会这样?我能做什么

下面是日志结果

09-23 22:44:48.203  26594-26594/com.mobile.soullounge E/apiFileSize﹕ 1298573 
09-23 22:44:48.204  26594-26594/com.mobile.soullounge E/downloadedFileSize﹕ 2696392

提前感谢。

Iv假设您正在使用

默认情况下,HttpURLConnection的这个实现请求服务器使用gzip压缩,并自动为
getInputStream()
的调用者解压缩数据。Therafore
getContentLength()
不能用于确定文件大小

但是!您可以按如下方式禁用压缩:

urlConnection.setRequestProperty("Accept-Encoding", "identity");

您的服务器也应设置为正确处理此类情况。

下面的答案是否适合您?如果是的话,你愿意接受吗?这是一些见解。我所做的是在api对象中添加一个文件大小属性。此大小是在创建对象时计算的。现在我可以在客户端访问它了。