Total members 10261 | Gratitudes |It is currently Wed May 23, 2012 8:39 am Login / Join Codemiles


All times are UTC [ DST ]




Post new topic Reply to topic  Quick reply  [ 6 posts ] 
Author Question
 Question subject: Huffman Compression-Decompression
PostPosted: Tue Apr 17, 2007 10:08 am 
Offline
Beginner
User avatar

Joined: Wed Mar 28, 2007 1:17 pm
Posts: 118
Location: Cairo-Egypt
Has thanked: 0 time
Have thanks: 5 time

This is java J2SE program for Huffman com-decom algorithm that let the user to browse for the file that need to compress or decompress and then make the required operation by huffman coding.

1. Run the program .
2. If you have a text and you want to compress click on Compress button and then select text file.
3. The compressed file (com.txt) and dictionary (dic.txt) will be created.
3. if you want to decompress the compressed file click on Decompress button and select com.txt file.
4. The decompressed file (decom.txt) will be created.

Note-->If you want to decompress put the dict.txt file with the com.txt file in the same location.



For this message the author tetosoft has received gratitude : evacide
TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: Huffman Compression-Decompression
PostPosted: Mon Sep 10, 2007 11:06 am 
Offline
Newbie
User avatar

Joined: Sat Sep 08, 2007 10:47 pm
Posts: 8
Has thanked: 0 time
Have thanks: 0 time
hello again,

Pls do u mind uploading the source code?
i'll love to try this out as well.

thnx.


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: Huffman Compression-Decompression
PostPosted: Mon Sep 10, 2007 12:09 pm 
Offline
Mastermind
User avatar

Joined: Tue Mar 27, 2007 10:55 pm
Posts: 2279
Location: Earth
Has thanked: 39 time
Have thanks: 61 time
Code:
/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

package huffman_compersion;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;


/**
*
* @author mohamed
*/
public class Main extends JFrame {
   
    /** Creates a new instance of Main */
   
    public Main() {
        setFont(new Font("Aril",Font.BOLD,14));
        setBackground(Color.BLACK);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500,200);
        setLocation(100,100);
        setTitle("Huffman-Compersion");
       
        Container cp=getContentPane();
        cp.setLayout(new FlowLayout());
        cp.setBackground(Color.BLACK);
        JButton myButton=new JButton("Start");
        myButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                readLoop();
            }
        });
        cp.add(myButton);
        JButton Browse=new JButton("Browse");
        Browse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int rVal =c.showOpenDialog(null);
                if(rVal == JFileChooser.APPROVE_OPTION) {
                    path=c.getSelectedFile().getAbsolutePath();
                   
                }
            }
        });
        cp.add(Browse);
        setVisible(true);
    }
    public void start() {
        try {
           
            ReadHand=new BufferedReader(new FileReader(path));
           
        } catch (FileNotFoundException ex) {
           
            ex.printStackTrace();
           
        }
    }
    public void readLoop() {
        int code=0;
        String ch;
        start();
        while(true) {
            try {
                code=ReadHand.read();
                if(code==-1)break;
                ch=fromCode_toString(code);
                if(mydata_str==null) {
                    mydata_str=ch;
                } else
                    mydata_str+=ch;
                add_to_list(ch);
               
            } catch (IOException ex) {
                ex.printStackTrace();
            }
           
           
           
           
           
        }
        try {
            ReadHand.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
       
        sort_my_data(mylist);
       
       
        evaluate_code();
        write_To_file();
       
        code_data_content();
        System.out.println(mydata_str);
        System.out.println(mydata_coded);
        write_Compressed();
        Decompress();
    }
    public void code_data_content() {
        String mySub;
        for(int i=0;i<mydata_str.length();i++) {
            mySub=mydata_str.substring(i,i+1);
            mySub=getChar_code(mySub);
            if( mydata_coded==null) {
                mydata_coded=mySub;
            } else {
                mydata_coded+=mySub;
            }
           
        }
    }
    public void write_Compressed() {
        File myFile=new File("comp.txt");
        FileOutputStream fout;
       
       
        try {
            WriteHand=new BufferedWriter(new FileWriter("comp.txt"));
            WriteHand.write(mydata_coded);
            WriteHand.flush();
            WriteHand.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
       
       
       
       
       
       
       
    }
    public void Decompress() {
        try {
            ReadHand1=new BufferedReader(new FileReader("table.txt"));
            ReadHand2=new BufferedReader(new FileReader("comp.txt"));
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
       
       
        String total = null;
        String data_from_file=null;
       
        try {
            while(true) {
                total=ReadHand1.readLine();
               
               
                if(total==null)break;
               
                if(total!=null)
                    list_From_file.add(new data(total.substring(0,1),total.substring(2,total.length())));
               
               
            }
           
            while(true) {
                total=ReadHand2.readLine();
               
               
                if(total==null)break;
               
                if(data_from_file==null)data_from_file=total;
                else
                    data_from_file+=total;
               
               
            }
            System.out.println(data_from_file);
            int j=0;
            int index;
            String data_to_file=null;
            for(int i=1;i<=data_from_file.length();i++) {
                index=isEqualSomething(data_from_file.substring(j,i));
                if(index!=-1) {
                    if(data_to_file==null)
                        data_to_file=((data)list_From_file.get(index)).getChar();
                    else
                        data_to_file+=((data)list_From_file.get(index)).getChar();
                   
                    j=i;
                }
            }
           
           
           
            WriteHand=new BufferedWriter(new FileWriter("decompress.txt"));
            WriteHand.write(data_to_file);
            WriteHand.flush();
            WriteHand.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
       
        display_list_content(list_From_file);
    }
    public int isEqualSomething(String str) {
        for(int i=0;i<list_From_file.size();i++) {
            if(((data)list_From_file.get(i)).getBinary_Code().equals(str))
                return i;
        }
        return -1;
    }
    public String getChar_code(String str) {
        myDataList mytable=(myDataList) arrList.get(0);
       
        for(int i=0;i<mytable.size();i++) {
            if(((data)mytable.get(i)).getChar().equals(str)) {
                return (((data)mytable.get(i)).getBinary_Code());
            }
        }
        return "??";
    }
    public void display_list_content(myDataList myLink_list) {
        data my_Data;
        for(int i=0;i<myLink_list.size();i++) {
            my_Data=((data)myLink_list.get(i));
            System.out.println(my_Data.getChar()+" "+my_Data.get_probability()+" "+my_Data.isFlag()+" "
                    +my_Data.getBinary_Code());
        }
       
    }
    public String fromCode_toString(int code) {
        return Character.toString((char)code);
    }
    public void add_to_list(String ch) {
       
       
        for(int i=0;i<mylist.size();i++) {
            if(ch.equals(((data)mylist.get(i)).getChar())) {
                ((data)mylist.get(i)).increment();
                return;
            }
        }
       
        mylist.add(new data(ch));
       
       
       
    }
    public void sort_my_data(myDataList myLinklist) {
        Collections.sort(myLinklist,my_comparator);
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
       
        new Main();
    }
    public void evaluate_code() {
        myDataList linklist=(myDataList) mylist.clone();
        myDataList temp;
        int size=linklist.size();
        // System.out.println(size);
       
        arrList.add( linklist.clone());
        while(size>2) {
            //  System.out.println(  ((data)linklist.get(size-2)).getChar()+"//////////"+  ((data)linklist.get(size-1)).getChar());
            ((data)linklist.get(size-2)).append_data(((data)linklist.get(size-1)));
            linklist.removeLast();
           
            temp=  (( myDataList) linklist.clone());
            ((data)linklist.get(size-2)).setFlag(true);
            setToflagOthers(temp);
            sort_my_data(linklist);
            sort_my_data(temp);
           
           
            arrList.add( temp);
           
           
           
            size--;
        }
        doCoding_to_tree();
       
    }
    public void setToflagOthers(myDataList mylist) {
        for(int i=0;i<mylist.size()-1;i++) {
            ((data)mylist.get(i)).setFlag(false);
        }
    }
    public void doCoding_to_tree() {
        myDataList temp1=((myDataList) arrList.get(arrList.size()-1));
        myDataList temp2;
        data mydata;
        ((data) temp1.get(0)).setBinary_Code("1");
        ((data) temp1.get(1)).setBinary_Code("0");
        for(int i=arrList.size()-1;i>0;i-- ) {
            temp1=((myDataList) arrList.get(i));
            temp2=((myDataList) arrList.get(i-1));
            copmare_and_code(temp1,temp2);
        }
    }
    public int get_Where_the_true_code(myDataList mylist) {
        for(int i=0;i<mylist.size();i++) {
            if(((data)mylist.get(i)).isFlag())
                return i;
        }
        return -1;
    }
    public void copmare_and_code(myDataList temp1,myDataList temp2) {
        for(int j=0;j<temp2.size();j++)
            for(int i=0;i<temp1.size();i++) {
            if ((((data)temp2.get(j)).getChar()).equals(((data)temp1.get(i)).getChar())) {
                ((data)temp2.get(j)).setBinary_Code(((data)temp1.get(i)).getBinary_Code());
               
            }
           
            }
        int postion= get_Where_the_true_code(temp1);
        ((data)temp2.get(temp2.size()-2)).setBinary_Code(((data)temp1.get(postion)).getBinary_Code()+"1");
        ((data)temp2.get(temp2.size()-1)).setBinary_Code(((data)temp1.get(postion)).getBinary_Code()+"0");
    }
   
   
    public void write_To_file() {
        try {
            WriteHand=new BufferedWriter(new FileWriter("table.txt"));
           
            myDataList mytable=(myDataList) arrList.get(0);
           
            for(int i=0;i<mytable.size();i++) {
                WriteHand.write(((data)mytable.get(i)).getChar());
                WriteHand.write(" ");
                WriteHand.write(((data)mytable.get(i)).getBinary_Code());
                WriteHand.newLine();
            }
           
            WriteHand.flush();
            WriteHand.close();
           
        } catch (IOException ex) {
            ex.printStackTrace();
        }
       
       
    }
    short substring_to_int(String str) {
        short b = 0;
        for(int i=0;i<str.length();i++) {
            if(str.charAt(i)=='1') {
               
                b+=(byte)Math.pow(2,i);
            }
        }
        return b;
       
    }
   
   
    private BufferedReader ReadHand;
    private data_Comparator my_comparator=new data_Comparator();
    private myDataList mylist=new myDataList();
    private myDataList arrList=new myDataList();
    private BufferedWriter WriteHand;
    private String mydata_str;
    private String mydata_coded;
    private myDataList list_From_file=new myDataList();
   
    private BufferedReader ReadHand2;
    private JFileChooser c = new JFileChooser();
    private BufferedReader ReadHand1;
    private String path;
   
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d=(Graphics2D )g;
     
        g2d.setBackground(Color.BLACK);
        g2d.setColor(Color.RED);
        g2d.drawString("www.codemiles.com team works",50,100);
         
    }
}
class myDataList extends LinkedList {
   
    public Object clone() {
        myDataList cp=new myDataList();
        data mydata;
       
        for(int i=0;i<size();i++) {
            mydata=(data)get(i);
            cp.add(new data(mydata.getChar(),mydata.get_probability(),mydata.isFlag()));
        }
        return cp;
    }
}/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

Code:
/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

package huffman_compersion;

import java.util.Comparator;

/**
*
* @author mohamed
*/
public class data_Comparator implements Comparator {
   
    /** Creates a new instance of data_Comparator */
    public data_Comparator() {
    }

    public int compare(Object o1, Object o2)
    {
        int prob_diff=((data)o2).get_probability()-((data)o1).get_probability();
       
        if(prob_diff<0)return -1;
        if(prob_diff>0)return 1;
        return 0;
    }
   
}
/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

Code:
/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

package huffman_compersion;

/**
*
* @author mohamed
*/
class data
{
    data(String ch)
    {
        this.ch=ch;
         probability=1;
    }
    data(String ch,int prob,boolean bool)
    {
        this.ch=ch;
         probability=prob;
         flag=bool;
       
    }
    data(String ch,String code)
    {
        this.ch=ch;
        binary_Code=code;
    }
    void increment()
    {
        probability++;
    }
    int get_probability()
    {
        return probability;
    }
    String getChar()
    {
        return ch;
    }
    void append_data(data d)
    {
        ch+=d.getChar();
        probability+=d.get_probability();
        flag=true;
    }

    public void setBinary_Code(String binary_Code) {
        this.binary_Code = binary_Code;
    }

    public String getBinary_Code() {
        return binary_Code;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
     
    private int probability;

    protected Object clone() throws CloneNotSupportedException
    {
        return new data(ch,probability,flag);
    }
    private String ch;
    private String binary_Code;
    private boolean flag;
}

/*
*   *       Please Visit us at www.codemiles.com     *
*  This Program was Developed by www.codemiles.com forums Team
*  *           Please Don't Remove This Comment       *
*/

_________________
Currenlty programming with : java , html , php , and javascript . (OCJP-6 certified )


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: Huffman Compression-Decompression
PostPosted: Mon Sep 10, 2007 12:45 pm 
Offline
Newbie
User avatar

Joined: Sat Sep 08, 2007 10:47 pm
Posts: 8
Has thanked: 0 time
Have thanks: 0 time
thnx again


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: Huffman Compression-Decompression
PostPosted: Tue Nov 29, 2011 8:58 am 
do this code work. . ??


TOP
  
Reply with quote  
 Question subject: Re: Huffman Compression-Decompression
PostPosted: Wed Mar 14, 2012 4:38 pm 
thanz 4 displaying d code :lol: ...hoping dat diz will work


TOP
  
Reply with quote  
Post new topic Reply to topic Quick reply  [ 6 posts ] 
Quick reply


  

 Similar topics
 Image compression
 Huffman coding for image compression
 Huffman
 source code of huffman coding ?
 Arithmatic Coding Com-Decompression algorithm
 LZW Com-Decompression algorithm
 Standard Huffman Coding

All times are UTC [ DST ]


Users browsing similar posts

Users browsing this forum: Google Adsense [Bot] and 2 guests



Jump to:  
Previous Question | Next Question 




Home
General Talks
Finished Projects
Code Library
Games
Tutorials

Java
C/C++
C-sharp
php
Script
JSP/Servlets
Ajax
ASP/ASP.net
Google SEO
Database
Communications
Phpbb3 styles
Photoshop tutorials
Flash tutorials
Find a job






Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
All copyrights reserved to codemiles.com 2007-2011
mileX v1.0 designed by codemiles team