我很抱歉,它不会让我标记作业。
你好,我正在做一个学校项目,使用霍夫曼编码来压缩文件中的数据。在这个作业中,您应该使用 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 位)。我想知道我是否必须以某种方式改变它试图读取的位数(以及我到底该怎么做),或者我是否以错误的方式出现(我
对于这个冗长的问题,我深表歉意,但如果我遗漏了任何重要信息,请告诉我。谢谢!