在android中获取gzip文件的实际大小

时间:2013-03-04 11:37:15

标签: java android web

我正在使用GZIPInputStream下载pdf文件 我想在UI按钮上显示文件的下载进度。但是,我没有得到文件的实际大小,我得到的是压缩大小,因为我无法显示正确的下载进度。 此下载进度超过100,因为实际文件大小大于文件的压缩大小。 服务器文件的头文件内容: - 我从服务器收到的以下信息,我使用的内容长度为压缩文件大小。

1.Connection 2.Content-Encoding 3.Content-length 4.Content-Type 5.Keep-Alive 6.Server 7.Date

这是我的代码。

        long fileLength =  httpResponse.getEntity().getContentLength();//
        GZIPInputStream input = new GZIPInputStream(new BufferedInputStream(httpResponse.getEntity().getContent()));
        FileOutputStream output = new FileOutputStream(destinationFilePath);

        byte data[] = new byte[1024];
        long total = 0;
        float percentage = 0;
        int count;
        currentDownloadingPercentage=0;
        while ((count = input.read(data)) != -1) 
        {
            total += count;
            output.write(data, 0, count);

            // publishing the progress....
            percentage = (float)total/(float)fileLength;
            percentage *= 100;
            if((int)percentage > (int)currentDownloadingPercentage)
            {
                currentDownloadingPercentage = percentage;
                Bundle resultData = new Bundle();
                resultData.putBoolean(DOWNLOAD_FAILED, false);
                resultData.putInt(DOWNLOAD_PROGRESS ,(int)percentage);
                receiver.send(processID, resultData);
                resultData = null;  
            }
        }

1 个答案:

答案 0 :(得分:0)

您需要更改读取流的方式:先读取并稍后膨胀(解压缩)。 这是因为直接从GZIPInputStream中读取会为您提供未压缩数据的大小,而您正在查找压缩数据的大小。