2015-05-24 31 views
2

我想在Java中使用xz压缩。使用xz 1.5压缩库,commons io 2.4库和commons压缩1.8.1库。我试图运行下面的代码给我非常不一致的结果。文本超过70%,音频和视频文件低于0.1%(1-compressed/original * 100)。我在每次压缩之前使用tarball。这应该只适用于文本文件?如何在Java中使用xz压缩时获得统一压缩?

package makexz; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.commons.compress.compressors.CompressorOutputStream; 
import org.apache.commons.compress.compressors.CompressorStreamFactory; 
import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream; 
import org.apache.commons.compress.utils.IOUtils; 

public class MakeXZ { 

public static void main(String[] args) throws FileNotFoundException, IOException, Exception { 

     FileOutputStream dest = new   FileOutputStream("C://TARDUMP//XZ//newvid.tar.xz"); 
    CompressorOutputStream cos = new  CompressorStreamFactory().createCompressorOutputStream(CompressorStreamFactory.XZ, dest); 
     String input = "C://TARDUMP//newvid.tar"; 
     IOUtils.copy(new FileInputStream(input), cos); 
     cos.close(); 
    } 

} 

回答

3

你所看到的是完全可以预料的。数据只有在具有可检测和利用的冗余时才能被压缩。音频和视频文件已经压缩。他们没有冗余的xz可以利用。文本文件中有很多冗余可以利用。