2016-08-20 52 views
0

我沒有看到我的代碼有什麼問題,但是每當我檢查目標位置中的壓縮文件的大小時,我只能看到文件大小隻減少了2或3KB,這樣做太少了大文件擴大到650MB左右。如何使用DeflaterOutputStream壓縮大文件?

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

在此先感謝。

+0

順便說一句,每次你調用'flush()'你都會用壓縮文件添加一些數據。它在這一點上得出了它正在研究的任何結論。 –

回答

2

您將無法壓縮MP4文件。 MP4文件格式通常會進行自己的壓縮,所以沒有一個通用(無損)壓縮器可以消除的冗餘。

嘗試使用命令行壓縮實用程序壓縮相同的文件。我預測你也會在那裏進行最小限度的壓縮。

您可以對(已經)壓縮的音頻/視頻文件進行進一步壓縮的唯一方法是使用格式的編解碼器進行解壓縮,然後以較低的質量重新壓縮。顯然,你在這樣做時會犧牲音頻/視頻質量。