0

我很抱歉,它不会让我标记作业。

你好,我正在做一个学校项目,使用霍夫曼编码来压缩文件中的数据。在这个作业中,您应该使用 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 是通用输入流对象,BITS_PER_WORD = 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 位)。我想知道我是否必须以某种方式改变它试图读取的位数(以及我到底该怎么做),或者我是否以错误的方式出现(我

对于这个冗长的问题,我深表歉意,但如果我遗漏了任何重要信息,请告诉我。谢谢!

4

1 回答 1

0

您似乎readBits()在 while 初始化中调用了额外的时间。这可能是它跳过字母的原因。你应该有类似的东西:

while(data != -1) {
  data = b.readBits(BITS_PER_WORD);
于 2013-04-26T23:27:19.353 回答