当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
JAVA基础:用哈弗曼编码实现压缩软件(2)
发布时间:2012/6/14 9:19:52 来源:城市网学院 编辑:ziteng
  接下来,要做的就是获得0——256之间每个字节所对应的哈弗曼编码,用一个String[] Code = new Code[256]保存 下来Java代码//获得编码
  private void getStrByte(hfmNode node,String s){
  if(node.getLeft()==null&&node.getRight()==null){
  Code[node.getData()] = 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[i]==null||Code[i]==""){   Code[i] = "";
  bos.write(0);
  }else{
  bos.write(Code[i].length());
  }
  }
  接下来就是,将每个字节的编码打入文件(这里需要吧8个长度的01串转换成一个byte打入文件):Java代码//把每个字节的编码表打到文件里
  int i = 0;//第i个字节
  int count = 0;//满8打一,计数器
  String writeCode = "";//写入的8位编码
  String allCode = "";//所有待写入的编码
  String inCode = "";
  while(i<256||count>=8){
  if(count>=8){//满8
  writeCode = allCode.substring(0,8);//前8位
  count-=8;
  allCode = allCode.substring(8);
  bos.write(changeString(writeCode));//写入一个字节
  }else{
  count+=Code[i].length();
  allCode+=Code[i];
  inCode+=Code[i];
  i++;//严重错误发生地
  }
  }
  //如果不满8位的
  if(allCode.length()>0){
  int len = 8-allCode.length();//补零
  for(int j=0;j
  allCode+="0";
  }
  inCode+=allCode;
  bos.write(changeString(allCode));
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved