Une implémentation de l'algorithme de compression LZW en Java.
LZW est un algorithme de compression créé en 1984 par Abraham Lempel, Jacob Ziv et Terry Welch.Dans sa forme la plus élémentaire, il publiera un fichier compressé comme une série de mots de code de longueur fixe. Les mots de code de largeur variable peuvent être utilisés pour augmenter la taille de la sortie des mots de code au fur et à mesure que le dictionnaire se remplit.
Ce projet est une modification de l'algorithme de compression LZW pour utiliser des mots de code de largeur de variable et pour réinitialiser éventuellement le livre de codes dans certaines conditions. Avec ces modifications de la main, j'ai comparé les performances du code LZW modifié avec le code LZW dans le manuel de cours, et en outre avec les performances d'une application de compression largement utilisée.
Compilez le programme en exécutant javac MyLZW.java .
Il y a 3 modes pour gérer ce projet:
LZW.java ). Quel mode doit être utilisé doit être choisi par le programme pendant la compression. Quel que soit le mode utilisé pour comprimer un fichier doit également être utilisé pour développer le fichier. L'utilisateur n'est pas tenu d'indiquer le mode à utiliser pour l'expansion. Le mode utilisé pour compresser un fichier sera stocké au début du fichier de sortie, afin qu'il puisse être récupéré automatiquement pendant l'expansion. Pour établir le mode à utiliser pendant la compression, le programme acceptera 3 arguments de ligne de commande:
* "n" pour ne rien faire
* "r" pour le mode réinitialisation
* "M" pour le mode moniteur
Notez que le code LZW fourni accepte déjà un argument de ligne de commande pour déterminer si la compression ou l'expansion doit être effectuée ("-" et "+", respectivement), et que les fichiers d'entrée / sortie sont fournis via une redirection d'E / S standard ("<" pour indiquer un fichier d'entrée et ">" pour indiquer un fichier de sortie). Pour compresser le fichier foo.txt pour générer foo.lzw à l'aide du mode réinitialisation, vous devriez pouvoir s'exécuter:
java MyLZW - r < foo.txt > foo.lzw de la même manière pour développer foo.lzw dans foo2.txt, vous devriez courir:
java MyLZW + < foo.lzw > foo2.txt