Код загрузки файлов загружает файлы больше оригинала - PullRequest
0 голосов
/ 10 сентября 2011

Я загружаю некоторые файлы .zip, хотя, когда я пытаюсь распаковать их, я получаю «ошибку данных». Теперь я пошел и увидел загруженные файлы, и они больше, чем оригинал.Может ли это быть причиной ошибки?

Код для загрузки файла:

URL=intent.getStringExtra("DownloadService_URL");
    FileName=intent.getStringExtra("DownloadService_FILENAME");
    Path=intent.getStringExtra("DownloadService_PATH");

    try{


    URL url = new URL(URL);
    URLConnection conexion = url.openConnection();

    conexion.connect();
    int lenghtOfFile = conexion.getContentLength();
    lenghtOfFile/=100;

    InputStream input = new BufferedInputStream(url.openStream());
    OutputStream output = new FileOutputStream(Path+FileName);

    byte data[] = new byte[1024];
    long total = 0;

    int count = 0;
    while ((count = input.read(data)) != -1) {
        output.write(data);
        total += count;

        notification.setLatestEventInfo(context, contentTitle, "Starting download " + FileName + " " + (total/lenghtOfFile), contentIntent);
        mNotificationManager.notify(1, notification);
    }


    output.flush();
    output.close();
    input.close();

Код для распаковки:

try {

            String zipFile = Path + FileName;


            FileInputStream fin = new FileInputStream(zipFile);
            ZipInputStream zin = new ZipInputStream(fin);

            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null) {
                UnzipCounter++;
                if (ze.isDirectory()) {
                    dirChecker(ze.getName());
                } else {
                    FileOutputStream fout = new FileOutputStream(Path
                            + ze.getName());
                    while ((Unziplength = zin.read(Unzipbuffer)) > 0) {
                        fout.write(Unzipbuffer, 0, Unziplength);                    
                    }
                    zin.closeEntry();
                    fout.close();

                }

            }
            zin.close();
            File f = new File(zipFile);
            f.delete();
            notification.setLatestEventInfo(context, contentTitle, "File successfully downloaded", contentIntent);
            mNotificationManager.notify(1, notification);

        } catch (Exception e) {

            notification.setLatestEventInfo(context, contentTitle, "Problem in downloading file ", contentIntent);
            mNotificationManager.notify(1, notification);

        }

    }

Процесс распаковки запускается, но останавливается послеИзвлечение некоторых файлов с этой ошибкой .. Я попробовал другой файл .zip и получил ошибку CRC Failed .. Я протестировал оба файла .zip с winrar ..

Оригинальный размер файла: 3.67mb .. Скачать размер файла: 3.93mb

1 Ответ

1 голос
/ 10 сентября 2011

Вы всегда записываете полный байтовый массив на диск, не проверяя, сколько данных вы читаете.

Кроме того, с точки зрения производительности все, что меньше 1500 байт (то есть обычный Ethernet-MTU), является довольно плохой идеей -хотя я думаю, что Java буферизует это где-то ниже, так или иначе, но зачем рисковать.

...