Java 当每个字符的位数不同时,如何从BitInputStream中读取每个字符

Java 当每个字符的位数不同时,如何从BitInputStream中读取每个字符,java,inputstream,huffman-code,Java,Inputstream,Huffman Code,很抱歉,它不允许我在作业上贴标签 您好,我正在做一个学校项目,使用哈夫曼编码来压缩文件中的数据。在本作业中,您应该使用BitInputStream对象读取文件,我不确定该对象是否在JCL中,因为教授提供的文档存在拼写错误,并且在某些方面不太明确。无论如何,它的工作原理似乎与扩展InputStream的其他类大致相同。我从课堂论坛上不断获得的代码如下: try { BitInputStream b = new BitInputStream(in);

很抱歉,它不允许我在作业上贴标签

您好,我正在做一个学校项目,使用哈夫曼编码来压缩文件中的数据。在本作业中,您应该使用BitInputStream对象读取文件,我不确定该对象是否在JCL中,因为教授提供的文档存在拼写错误,并且在某些方面不太明确。无论如何,它的工作原理似乎与扩展InputStream的其他类大致相同。我从课堂论坛上不断获得的代码如下:

        try {
            BitInputStream b = new BitInputStream(in);
            int data;

            while((data  = b.readBits(BITS_PER_WORD)) != -1) {
                data = b.readBits(BITS_PER_WORD);
                q.freq[data]++; //instance variable (size 256) in PriorityQueue q to 
                //count number of occurrences of each piece of data.
                System.out.println(data);
            }
        }catch(FileNotFoundException e) {
            System.out.println("File not found.");
        }
        catch(IOException e) {
            System.out.println("Error while reading file.");
        }
…其中@param in是通用输入流对象,每个字的位=8,从常量接口继承。问题是,每当我运行它时,它似乎会跳过文件中的每一个字符,从第一个字符开始。例如,包含“在湖边看到的怪诞的眼睛”的小.txt文件将打印: 101 105 32 121 115 115 101 32 101 114 108 107 46 10(“e”、“i”、“y”等)。我想这与试图一次读取8位有关,例如,以位为单位的“a”的ascii值是1100001(7位),而空间是100000(6位)。我想知道我是否必须以某种方式改变它试图读取的比特数(以及我到底是如何做到的),或者我是不是走错了路(我只是最近才习惯了使用比特/字节的想法,可能有一些重要的事情我不知道)


我很抱歉问了这么长的问题,但是如果我遗漏了任何重要信息,请告诉我。谢谢

您似乎在while初始化过程中额外调用了
readBits()
。这可能就是它跳过字母的原因。您应该有如下内容:

while(data != -1) {
  data = b.readBits(BITS_PER_WORD);