Share Pastebin
Guest
Public paste!

sh00p

By: a guest | Mar 20th, 2010 | Syntax: Java | Size: 2.80 KB | Hits: 114 | Expires: Never
Copy text to clipboard
  1. import java.io.*;
  2. import java.util.Hashtable;
  3. import java.util.ArrayList;
  4.  
  5. public class Encode {
  6.         public static void main(String[] args) {
  7.                 String sourcefilename = args[0];
  8.                 String lookuptablefilename = args[1];
  9.                 String encodedfilename = args[2];
  10.                
  11.                
  12.                 ArrayList<Integer> toEncode = readSource(args[0]);
  13.                
  14.                 FrequencyTable frequencyTable = new FrequencyTable(toEncode);
  15.                 HuffTree huffTree = new HuffTree(frequencyTable);
  16.                 LookupTable lookupTable = huffTree.getLookupTable();
  17.                
  18.                 int padding = writeEncodedFile(encodedfilename, toEncode, lookupTable);
  19.                
  20.                 lookupTable.setPadding(padding);
  21.                 saveLookupTable(lookuptablefilename, lookupTable);
  22.                
  23.                 printCompressionRatios(sourcefilename, encodedfilename);
  24.         }
  25.        
  26.         public static int writeEncodedFile(String encodedfilename, ArrayList<Integer> toEncode, LookupTable lookupTable) {
  27.                 BitFileWriter writer = new BitFileWriter(encodedfilename);
  28.                
  29.                 String out = "";
  30.                 for(int i = 0; i < toEncode.size(); i++) {
  31.                         out = (String) lookupTable.findsCodeFromRaw.get(toEncode.get(i));
  32.                         for(int j = 0; j < out.length(); j++) {
  33.                                 writer.writeBit(Character.toString(out.charAt(j)));
  34.                         }
  35.                 }
  36.                 int padding = writer.finish();
  37.                 System.out.printf("Padding: %d\n",padding);
  38.                 return padding;        
  39.         }
  40.  
  41.         public static ArrayList<Integer> readSource(String sourcefilename) {
  42.                 FileInputStream sourceStream = null;
  43.                 try {
  44.                         sourceStream = new FileInputStream(sourcefilename);
  45.                 } catch (FileNotFoundException fnfe) {
  46.                         System.out.printf("File not found.\n");
  47.                         System.exit(0);
  48.                 }
  49.                
  50.                 ArrayList<Integer> toEncode = new ArrayList<Integer>();
  51.                 int toEncodeRaw = 0;
  52.                 try {
  53.                         while((toEncodeRaw = sourceStream.read()) != -1) {
  54.                                 toEncode.add(toEncodeRaw);
  55.                         }
  56.                 } catch (IOException ioe) {
  57.                         System.out.printf("IOException.\n");
  58.                         System.exit(0);
  59.                 }
  60.                 return toEncode;               
  61.         }
  62.  
  63.         public static void saveLookupTable(String lookuptablefilename, LookupTable lookupTable) {
  64.         try {
  65.             FileOutputStream fileOut = new FileOutputStream(lookuptablefilename);
  66.             ObjectOutputStream out = new ObjectOutputStream(fileOut);
  67.  
  68.             out.writeObject(lookupTable);
  69.             out.close();
  70.             fileOut.close();
  71.            
  72.         } catch(FileNotFoundException e) {
  73.             e.printStackTrace();
  74.         } catch (IOException e) {
  75.             e.printStackTrace();
  76.         }              
  77.         }
  78.        
  79.         public static void printCompressionRatios(String in, String out) {
  80.                 File inFile = new File(in);
  81.                 File outFile = new File(out);
  82.                
  83.                 long inFileSize = inFile.length();
  84.                 long outFileSize = outFile.length();
  85.                 double ratio = outFileSize / (double) inFileSize;
  86.                
  87.                 System.out.println("Size of infile: " + inFileSize);
  88.                 System.out.println("Size of outfile: " + outFileSize);
  89.                 System.out.println("Compression ratio: " + ratio);
  90.         }
  91. }