会计考友 发表于 2012-8-4 12:37:27

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]
查看完整版本: JAVA基础:用哈弗曼编码实现压缩软件(2)