Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static String decompression (String filename) {
- BinaryIn bi = new BinaryIn(filename);
- ArbreHuffman aha = new ArbreHuffman();
- String ret = "";
- Noeud racine = aha.getRacine();
- Noeud courant = racine;
- ArrayList<Boolean> valAscii = new ArrayList<Boolean>();
- boolean enAscii=true;
- Boolean tmp;
- while (true) {
- tmp=null;
- try {
- tmp = bi.readBoolean();
- } catch (RuntimeException e){
- break;
- }
- if (tmp==null) break;
- // affiche le bit qu'on vient de lire.
- System.out.println("- "+(tmp?"1":"0"));
- if (enAscii) {
- valAscii.add(tmp);
- if ( (valAscii.size()==8 && (!valAscii.get(0)) ) ||
- ((valAscii.size()==16 && valAscii.get(0) && valAscii.get(1) && (!valAscii.get(2)) )) ||
- ((valAscii.size()==24 && valAscii.get(0) && valAscii.get(1) && valAscii.get(2) && (!valAscii.get(3))))) {
- Char s = laValeurEnAsciiDuBinaire(valAscii);
- aha.modification(s.getC());
- racine=aha.getRacine();
- // la valeur du retour
- ret += s.getC();
- // reset
- valAscii = new ArrayList<Boolean>();
- enAscii = false;
- courant=racine;
- }
- } else {
- if (courant.get(tmp) != null) {
- courant=courant.get(tmp);
- }
- if (courant.estNyt()) {
- // si son fils est null ca veut dire
- // qu'on a le code du noeud courant
- enAscii = true;
- valAscii= new ArrayList<Boolean>();
- } else {
- if (courant.estFeuille()) {
- char c = courant.getValue().getC();
- aha.modification(c);
- racine=aha.getRacine();
- ret += c;
- courant=racine;
- } else {
- System.err.println("error");
- }
- }
- }
- }
- return ret;
- }
- private static String prrr(ArrayList<Boolean> o) {
- String ret="";
- for (int i=0; i<o.size(); i++){
- if (o.get(i)) ret+="1";
- else ret +="0";
- }
- return ret;
- }
- private static Char laValeurEnAsciiDuBinaire(ArrayList<Boolean> valAscii) {
- char ret=0;
- System.out.println("Just received : "+prrr(valAscii));
- for (int i=valAscii.size()-1; i>=0; i--){
- if (valAscii.get(i))
- ret = (char) (ret | (1 << (7-i)));
- }
- return new Char(ret);
- }
Add Comment
Please, Sign In to add comment