Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ do the decoding algorithm.

There's also a bunch of explanation about BitWriter, a writer class I made to write bits out, so you can
look at the comments for that if you want.


UPDATE: Decoder works in conjunction with Encoder for all three test files. Modeled after GeekforGeeks algorithm. - Rhea
Binary file modified bin/Decoder.class
Binary file not shown.
2 changes: 1 addition & 1 deletion decoded.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0000011000010000011000100000011000110001000000000001000000100001000000010001000000110001000001100001000001010001000010000001000001000001000010100001000001110001000010110001000010010001000011000001000011110001000011100001000100010001000011010001000100110001000100000001000101000001000100100001000101010001000110000001000101110001000110100001000101100001000111000001000110010001000111010001000110110001000111100001001000010001001000000001000110110000011001000000011001010000011001100000011001110001001000100001000111110001001010100001001010010001001011000001001000110000011000110001001001010001001001110001001011010001001010110001001011100001001100100001001101010001001101000001001101110001001100110001001110010001001101100001001110100001001110000001001110110001001111100001001111010001010000000001001111000001010000100001001111110001010000110001010000010001010001000001010001110001010001100001010010010001010001010001010010110001010010000000011000110000
abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcdefgabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcdefgabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
Binary file modified encoded.txt
Binary file not shown.
2 changes: 1 addition & 1 deletion original.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
abcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcdefgabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcdefgabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
66 changes: 64 additions & 2 deletions src/Decoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,72 @@
import java.io.*;
public class Decoder {



//public static final int BITS = 12;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
FileInputStream in = new FileInputStream("encoded.txt");//reader
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("decoded.txt")));
HashMap<Integer,String> decodeMap = new HashMap<Integer,String>();
int counter = 0;

StringBuilder ans = new StringBuilder();
for (int i=0; i<256; i++) //initializing existing ascii values in hashmap
{
decodeMap.put(counter,String.valueOf((char)(i)));
counter++;
}

//bits to binary
StringBuilder binary = new StringBuilder();
byte[] bits = in.readAllBytes();
for(int i =0;i<bits.length;i++)
{
System.out.println(bits[i]+" "+toBinary(bits[i]));
out.print(toBinary(bits[i]));
//out.print(toBinary(bits[i]));
binary.append(toBinary(bits[i]));
}

//start rebuilding dictionary
int currentInt, nextInt;//currentInt = old, nextInt = new
String s,c, nextBin, currentBin;
c = "";

for(int i = 0; i<= binary.length()-12; i+=12)
{

currentBin = binary.substring(i,i+12);
currentInt = binaryToInt(currentBin);
if(i+24 <= binary.length()-1) {
nextBin = binary.substring(i+12, i+24);
}
else {
nextBin = binary.substring(i+12, binary.length());
}
nextInt = binaryToInt(nextBin);


if (!decodeMap.containsKey(nextInt)) { // if the key's value doesnt exist
s = decodeMap.get(currentInt); //string/character of current binary
s += c ; // current + first of next (defined below - will defintiley run the else statement first
//decodeMap.put(counter++, "" + s );//add it bc it doesnt exist yet
}
else {
s = decodeMap.get(nextInt); //next binary combo's letter/character/string

//dont have to set old = newInt because reading in binary 12 at a time with for loop
}
c = s.substring(0,1); //first character of s
decodeMap.put(counter++, "" + decodeMap.get(currentInt) + c );
out.print(decodeMap.get(currentInt));
}

//need to have a maximum size?

// https://www.geeksforgeeks.org/lzw-lempel-ziv-welch-compression-technique/



/*
while(true)
{
Expand All @@ -41,6 +93,7 @@ public static void main(String[] args) throws IOException{
out.println(ans.substring(i,i+12));
i = i+12;
}*/

out.close();

}
Expand All @@ -59,5 +112,14 @@ public static String toBinary(int a)
ans.append(cur);
return ans.toString();
}

public static int binaryToInt(String binary){

return Integer.parseInt(binary,2);

}




}