JAVA基础:用哈弗曼编码实现压缩软件(2)
接下来,要做的就是获得0——256之间每个字节所对应的哈弗曼编码,用一个String[] Code = new Code保存 下来Java代码//获得编码private void getStrByte(hfmNode node,String s){
if(node.getLeft()==null&&node.getRight()==null){
Code = s;//获得编码字符串
}
if(node.getLeft()!=null){
getStrByte(node.getLeft(),s+"0");
}//左零 if(node.getRight()!=null){
getStrByte(node.getRight(),s+"1");
}//右1
}
然后就是把每个字节的编码长度打入文件:Java代码//先将0-255的编码长度打到文件里
for(int i=0;i
if(Code==null||Code==""){ 转自:考试网 -
Code = "";
bos.write(0);
}else{
bos.write(Code.length());
}
}
接下来就是,将每个字节的编码打入文件(这里需要吧8个长度的01串转换成一个byte打入文件):Java代码//把每个字节的编码表打到文件里
int i = 0;//第i个字节
int count = 0;//满8打一,计数器
String writeCode = "";//写入的8位编码
String allCode = "";//所有待写入的编码
String inCode = "";
while(i=8){
if(count>=8){//满8
writeCode = allCode.substring(0,8);//前8位
count-=8;
allCode = allCode.substring(8);
bos.write(changeString(writeCode));//写入一个字节
}else{
count+=Code.length();
allCode+=Code;
inCode+=Code;
i++;//严重错误发生地
}
}
//如果不满8位的
if(allCode.length()>0){
int len = 8-allCode.length();//补零
for(int j=0;j
allCode+="0";
}
inCode+=allCode;
bos.write(changeString(allCode));
}
页:
[1]