Guest User

Untitled

a guest
Apr 26th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.23 KB | None | 0 0
  1.     public static String decompression (String filename) {
  2.        
  3.         BinaryIn bi = new BinaryIn(filename);
  4.         ArbreHuffman aha = new ArbreHuffman();
  5.         String ret = "";
  6.         Noeud racine = aha.getRacine();
  7.        
  8.         Noeud courant = racine;
  9.        
  10.         ArrayList<Boolean> valAscii = new ArrayList<Boolean>();
  11.         boolean enAscii=true;
  12.         Boolean tmp;
  13.        
  14.             while (true) {
  15.                 tmp=null;
  16.                 try {
  17.                     tmp = bi.readBoolean();
  18.                 } catch (RuntimeException e){
  19.                     break;
  20.                 }
  21.                
  22.                 if (tmp==null) break;
  23.                
  24.                 // affiche le bit qu'on vient de lire.
  25.                 System.out.println("- "+(tmp?"1":"0"));
  26.                
  27.                 if (enAscii) {
  28.                     valAscii.add(tmp);
  29.                     if ( (valAscii.size()==8 && (!valAscii.get(0)) ) ||
  30.                          ((valAscii.size()==16 && valAscii.get(0) && valAscii.get(1) && (!valAscii.get(2)) )) ||
  31.                          ((valAscii.size()==24 && valAscii.get(0) && valAscii.get(1) && valAscii.get(2) && (!valAscii.get(3))))) {
  32.                         Char s = laValeurEnAsciiDuBinaire(valAscii);
  33.                         aha.modification(s.getC());
  34.                         racine=aha.getRacine();
  35.                        
  36.                         // la valeur du retour
  37.                         ret += s.getC();
  38.                        
  39.                        
  40.                         // reset
  41.                         valAscii = new ArrayList<Boolean>();
  42.                         enAscii = false;
  43.                         courant=racine;
  44.                     }
  45.                 } else {
  46.                     if (courant.get(tmp) != null) {
  47.                         courant=courant.get(tmp);
  48.                     }
  49.                     if (courant.estNyt()) {
  50.                         // si son fils est null ca veut dire
  51.                         // qu'on a le code du noeud courant
  52.                         enAscii = true;
  53.                         valAscii= new ArrayList<Boolean>();
  54.                     } else {
  55.                         if (courant.estFeuille()) {
  56.                             char c = courant.getValue().getC();
  57.                             aha.modification(c);
  58.                             racine=aha.getRacine();
  59.                             ret += c;
  60.                             courant=racine;
  61.                         } else {
  62.                             System.err.println("error");
  63.                         }
  64.                     }
  65.                 }
  66.             }  
  67.     return ret;
  68. }
  69.  
  70.  
  71.     private static String prrr(ArrayList<Boolean> o) {
  72.         String ret="";
  73.         for (int i=0; i<o.size(); i++){
  74.             if (o.get(i)) ret+="1";
  75.             else ret +="0";
  76.         }
  77.         return ret;
  78.     }
  79.    
  80.     private static Char laValeurEnAsciiDuBinaire(ArrayList<Boolean> valAscii) {
  81.         char ret=0;
  82.         System.out.println("Just received : "+prrr(valAscii));
  83.         for (int i=valAscii.size()-1; i>=0; i--){
  84.             if (valAscii.get(i))
  85.                 ret = (char) (ret | (1 << (7-i)));
  86.         }
  87.         return new Char(ret);
  88.     }
Add Comment
Please, Sign In to add comment