0

我正在尝试使用 HttpCLient 4 下载一个 zip 文件,它的速度大约为 0.5(千字节/千位)?每分钟。该文件不到 1 MB,下载可能需要一个小时!难道我做错了什么?我还应该怎么做?这是我当前的实现:

@Override
            protected Uri doInBackground(String... params) {
                publishProgress("Downloading...");  
                try {
                        HttpPost searchPOST = new HttpPost("http://www.somesite.com/" + searchResult.getURLSuffix());
                        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
                        //added parameters here...
                        UrlEncodedFormEntity paramsEntity = new UrlEncodedFormEntity(formparams, HTTP.UTF_8);
                        searchPOST.setEntity(paramsEntity);


                HttpResponse manualResponse = client.execute(searchPOST);

                Header fileNameHeader = manualResponse.getFirstHeader("Content-Disposition");
                Pattern p = Pattern.compile("filename=\"(.+?)\"");
                Matcher m = p.matcher(fileNameHeader.getValue());

                if (m.find()) {
                    String fileName = m.group(1);
                    InputStream zipStream = manualResponse.getEntity().getContent();
                    File cacheDir = context.getCacheDir();
                    String tempFileForZip = cacheDir.getAbsolutePath() + "/" + fileName;
                    FileOutputStream fos = new FileOutputStream(tempFileForZip);
                    int bytesDownloaded = 0;
                    try {
                        int c;
                        while ((c = zipStream.read()) != -1) {
                            fos.write(c);
                            bytesDownloaded++;
                            kilobytesDownloaded=(bytesDownloaded / 1000);
                            publishProgress((String[])null);
                        }
                    } finally {
                        if (zipStream != null) {
                            zipStream.close();
                        }
                        if (fos != null) {
                            fos.close();
                        }
                    }

                    fos.close();


                String zipFilePath = tempFileForZip;

                //Change to indeterminate
                kilobytesDownloaded = fileSize;
                publishProgress("Extracting...");

                //TODO: Preferences for save directory
                saveDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "Downloads/");
                ZipTools.unzipArchive(new File(zipFilePath), saveDirectory);

                }

                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } finally {

                    }

                return Uri.fromFile(saveDirectory);
         }
4

1 回答 1

7

步骤#1:不要调用publishProgress()每个字节。

步骤#2:一次读取多个字节。更好的是,不要InputStream直接使用 -- 用于HttpEntity#writeTo()HttpClient数据写入输出文件。

于 2010-08-01T09:04:41.997 回答