Compression et décompression de données de grande taille en java?


J'ai besoin de compresser/décompresser différents types de fichiers contenus dans un dossier dont la taille peut être supérieure à 10-11 Go. J'ai utilisé le code suivant mais cela prend de temps pour compresser les données.

BufferedReader in = new BufferedReader(new FileReader("D:/ziptest/expansion1.MPQ"));
BufferedOutputStream out = new BufferedOutputStream(
    new GZIPOutputStream(new FileOutputStream("test.gz")));

int c;
while ((c = in.read()) != -1)
  out.write(c);
in.close();
out.close();

Veuillez me suggérer une bibliothèque de compression et de décompression rapide en java, je veux également diviser le gros fichier en différentes parties, par exemple dans un morceau de 100 Mo chacune.

Author: Peter Lawrey, 2011-08-05

1 answers

Lecteur/graveur est uniquement pour le Texte et, si vous essayez de lire binaires avec ces corrompus.

Au lieu de cela, je vous suggère d'utiliser FileInputStream. Le moyen le plus rapide pour copier les données est d'utiliser votre propre tampon.

InputStream in = new FileInputStream("D:/ziptest/expansion1.MPQ");
OutputStream out = new GZIPOutputStream(
            new BufferedOutputStream(new FileOutputStream("test.gz")));

byte[] bytes = new byte[32*1024];
int len;
while((len = in.read(bytes)) > 0)
   out.write(bytes, 0, len);

in.close();
out.close();

Puisque vous lisez de gros morceaux d'octets, il est plus efficace de ne pas BufferedInput/OuptuStream car cela supprime une copie. Il y a un BufferedOutptuStream après le GZIPOutputStream car vous ne pouvez pas contrôler la taille des données qu'il produit.

BTW: Si vous êtes seulement en lisant ceci avec Java, vous pouvez utiliser DeflatorOutputStream, c'est légèrement plus rapide et plus petit, mais uniquement pris en charge par Java AFAIK.

 7
Author: Peter Lawrey, 2011-08-05 11:03:53