如何使用DeflaterOutputStream压缩大文件?

时间:2016-08-20 05:30:13

标签: java compression deflate

我的代码没有看到任何问题,但每当我检查目标位置中压缩文件的大小时,我只看到文件大小只减少了2或3KB,这太少了对于大文件扩展到大约650MB。

  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");
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

您无法压缩MP4文件。 MP4文件格式通常会进行自己的压缩,因此没有冗余可以消除一般(无损)压缩器。

尝试使用命令行压缩实用程序压缩同一文件。我预测你也会在那里进行最小的压缩。

为(已经)压缩的音频/视频文件进行进一步压缩的唯一方法是使用格式的编解码器进行解压缩,然后以较低的质量重新压缩。显然,你这样做会牺牲音频/视频质量。