2015-05-24 2 views
2

Я пытаюсь сжатие xz в Java. Используя библиотеку сжатия xz 1.5, библиотека commons io 2.4 и библиотека commons compress 1.8.1. Я попытался запустить код, который дал мне очень непоследовательные результаты. Более 70% текста, менее 0,1% для аудио и видео файлов (1-сжатый/оригинал * 100). Я использую создание tarball перед сжатием каждый раз. Предполагается, что это работает только для текстовых файлов?Как получить равномерное сжатие при использовании сжатия xz в Java?

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. В текстовых файлах есть много избыточности.