Как сжать большие файлы с помощью DeflaterOutputStream?

java compression deflate

173 просмотра

1 ответ

Я не вижу ничего плохого в своем коде, но всякий раз, когда я проверяю размер сжатого файла в месте назначения, я вижу только то, что размер файла был уменьшен только на 2 или 3 КБ, что слишком мало для больших файлов масштабирование до около 650 МБ.

  public static void main(String[] args) throws Exception
  {
    FileInputStream fin = new FileInputStream("filetobecompressed.mp4");
    FileOutputStream fout = new FileOutputStream("compressedfile.mp4");
    DeflaterOutputStream dout = new DeflaterOutputStream(fout);
    byte b[] = new byte[8192];
    int r;
    float tracker = 0;
    while((r=fin.read(b))!=-1)
    {
        dout.write(b,0,r);
        dout.flush();
        tracker += (float)r/1000000f;
        System.out.println(tracker + "MB compressed");
    }
    dout.finish();
    fin.close();
    fout.close();
    dout.close();
    System.out.println("Compression successful");
}

Заранее спасибо.

Автор: A. Vignesh Источник Размещён: 08.11.2019 10:55

Ответы (1)


2 плюса

Вы не сможете сжать файл MP4. Формат (ы) файлов MP4, как правило, выполняют свое собственное сжатие, поэтому для обычного компрессора (без потерь) нет избыточности, которую нужно исключить.

Попробуйте сжать тот же файл, используя утилиту сжатия командной строки. Я предсказываю, что у вас также будет минимальное сжатие.

Единственный способ получить дополнительное сжатие для (уже) сжатого аудио / видео файла - это использовать кодеки для этого формата, чтобы распаковать его, а затем повторно сжать с более низким качеством. Очевидно, что вы жертвуете качеством аудио / видео, делая это.

Автор: Stephen C Размещён: 20.08.2016 05:33
Вопросы из категории :
32x32