我是新手,最近在做毕业设计,是关于数据压缩的,用JAVA编写出一个压缩程序 使用LZ78算法 现在的问题是 我已经得到压缩以后的数据,然后进行编码写进另一个文件 
压缩后的数据格式是一个int型和一个Sting型的字母 int 型的参数在LZ78压缩算法里表示索引,String型的参数表示nextChar,这两组数据分别背存进两个Vector 
例如 源文件是:aababc 一共6个字节 
在编译器里把两个Vector打印出来的格式应该是 0a1b2c 
问题是如果把 0a1b2c 当做STRING型写进压缩文件里去的话也是6个字节,如果分开用二进制来写的话 0是0只占1bit,1是1占1bit,2是10只占2bit,然后a b c各 8bits 所以加起来还不到4个字节 当编码完以后,我希望从压缩文件读数据时,分辨哪个是int型的,哪个string型的 然后把他们再赋给两个Vector 最后进行解压! 
我刚用DataOutputStream写数据 
DataInputStream  dos= 文件名 for(int i=0; i <IndexVec.size();i++) 

  dos.writeInt((Integer)IndexVec.elementAt(i));//这个向量里存的是INT型的 
  dos.WriteBytes((String)NextCharVec.elementAt(i));//这个存STRING型的 

最后压缩文件越写越大,而且不知道怎么分别读出 int型参数和String型的参数 
希望您能帮我解答,很重要,这是我的毕业设计,谢谢您了

解决方案 »

  1.   

    这不是这么存D...
    把对象保存起来,这个操作叫序列化
    请上GOOGLE查找java.io.Serializable接口的用法
      

  2.   

    beiouwolf ,你能详细的说说吗,谢谢了
      

  3.   

    使用序列化的话,会有很多类的信息被保存进去,占用的空间会比较大。
    估计你的String是变长的 ,如果是定长,估计你也会处理。
    如果是变长的,你可以先写入一个字符串的长度,然后再写入字符串,这样你就知道字符串怎么读出来了。
      

  4.   

    fastmask你好,经过压缩以后会得到2组数据的格式是:很多个变长的int型的数,和很多个一个字节的String型的串也就是只一个字母;例如0   a
    1   b
    2   c
    2   b
    .   .
    .   .
    .   .19  g
    这两组数据 第一组是变长的int型,第二组是只有一个字母的String型的我把他们分别存在两向量IndexVec和NextCharVec里面
    如果把他们全部按String型的写进文件的话 文件会大于压缩之前的文件,所以我想用一个办法把他们按二进制写进压缩文件里,然后解压的时候分别读出int型和String型的数据,最后再根据这些数据进行解压文件
      

  5.   

    如此的话,你可以先写入一个int的长度的值,一个字节够了,然后写入int,然后写入一个字符。还有一种方法
    就是你的int的最大长度是多少(4或者8),全部按照最大长度写入int值,然后写入一个字符。根据需要自己考
    虑吧。
      

  6.   

    fastmask 你好,你说的第一中方法如何实现,我试过把int 型的转换成byte型的然后在写,但是byte的范围是-128~127,比如是int型的是2000的话就会越界,请指导!不胜感激!!!!