ممنون از راهنماییتون..من با توجه دانشی دارم فقط در این حد تونستم تعغیرش بدم که بازم جواب نداد
بنظرتون چکار کنم؟
package darseOne;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
public class yek {
static String bytecods = "";
static String encoded = "";
static String decoded = "";
static int plus = 0;
static int[] ASKY = new int[65536];
static PriorityQueue<Node> nodes = new PriorityQueue<>((o1, o2) -> (o1.value < o2.value) ? -1 : 1);
static TreeMap<Character, String> maps = new TreeMap<>();
static Scanner ss;
static FileReader reader;
static FileInputStream inputStream;
static byte[] bi1;
public static void main(String[] args) {
try {
// inputStream = new FileInputStream("moji/file/test");
// ss = new Scanner(inputStream,"Cp1252");
Path path = Paths.get("moji/file/test");
bi1 = Files.readAllBytes(path);
} catch (Exception e1) {
e1.printStackTrace();
}
StringBuffer buff = new StringBuffer();
// while (ss.hasNextLine()) {
// buff.append(ss.nextLine()+"\n");
//
// }
bytecods = new String(bi1);
System.out.println("1 copid file");
for(int i = 0 ; i < ASKY.length ; i++){
ASKY[i]=0;
}
System.out.println("2 creat aski code");
for (int i = 0 ; i < bytecods.length(); i++){
ASKY[bytecods.charAt(i)]++;
}
System.out.println("3 Counts alphabet");
for (int i = 0 ; i < ASKY.length ; i++){
if(ASKY[i]!=0){
nodes.add(new Node(ASKY[i], (char)i));
}
}
System.out.println("4 creat tree barg");
while(nodes.size()>1){
//add kardan
nodes.add(new Node(nodes.poll(),nodes.poll()));
}
System.out.println("5 creat tree root");
//creat binari
creatBinari(nodes.peek(),"");
System.out.println("6 change tree to binari");
String encod = Encoding();
while (encod.length()%8!=0) {
encod = "0"+encod;
plus++;
}
System.out.println("7 encoding file");
try {
FileOutputStream fos = new FileOutputStream("moji/Compressed/encode.txt");
fos.write(encod.getBytes());
fos.close();
System.out.println("* convert 0 & 1 to file");
} catch (IOException e) {
e.printStackTrace();
}
String[] hash = new String[encod.length()/8];
int j = encod.length()-8;
int jj = encod.length();
for(int i=0;i<hash.length;i++){
hash[hash.length-i-1] =encod.substring(j, jj);
j=j-8;
jj=jj-8;
}
byte[] byt = new byte[hash.length];
for(int i=0;i<byt.length;i++){
int b=0;
int komak =hash[i].length();
for(int ii=0;ii<komak;ii++){
b = b + (Integer.parseInt(hash[i].substring(komak-ii-1, komak-ii))*((int)Math.pow(2,ii)));
}
byt[i] = (byte) b;
}
try{
FileOutputStream fos = new FileOutputStream("moji/Compressed/compress.moji");
fos.write(byt);
fos.close();
}catch(Exception e){
}
System.out.println("8 convert to byte");
System.out.println("start decomperes");
try{
FileInputStream in = new FileInputStream("moji/Compressed/compress.moji");
byte chunk[] = new byte[(encod.length()/8)+1];
in.read(chunk, 0, (encod.length()/8)+1);
StringBuffer buf = new StringBuffer();
for (byte b : chunk){
String s = String.format("%8s", Integer.toBinaryString(b & 0xFF));
s=s.replace(" ", "0");
buf.append(s);
}
String baz = buf.toString();
baz = baz.substring(plus);
encod = baz;
in.close();
}catch(Exception e){
System.out.println("no");
}
String fin= Decoded();
try {
Path path = Paths.get("moji/baz/baz");
Files.write(path, fin.getBytes());
System.out.println("done");
} catch (IOException e) {
e.printStackTrace();
}
if(fin.equals(bytecods)){
System.out.println("***yes***");
}else {
System.out.println("---no---");
}
}
static String Decoded(){
decoded="";
StringBuffer b = new StringBuffer();
for(int i=0;i<encoded.length();){
Node n = nodes.peek();
while(n.left != null && n.right != null){
if(encoded.charAt(i)== '0'){
n=n.left ;
}else if(encoded.charAt(i)== '1'){
n=n.right;
}
i++;
}
b.append(n.character);
}
return b.toString();
}
static String Encoding(){
encoded = "";
String k = bytecods;
StringBuffer buffer = new StringBuffer();
for(int i=0 ; i<bytecods.length();i++){
buffer.append(maps.get(bytecods.charAt(i)));
}
encoded = buffer.toString();
return encoded;
}
static void creatBinari(Node node,String s){
if(node != null){
if(node.left != null){
creatBinari(node.left,s+"0");
}
if(node.right != null){
creatBinari(node.right,s+"1");
}
if(node.right == null && node.left == null){
maps.put(node.character,s);
}
}
}
}
class Node{
Character character;
Double value;
Node left,right;
public Node(double value,Character character) {
this.value = value;
this.character = character;
left = null;
right = null;
}
public Node(Node left, Node right) {
this.value = left.value + right.value;
this.character = null;
if (left.value < right.value) {
this.right = right;
this.left = left;
} else {
this.right = left;
this.left = right;
}
}
}