我很抱歉,它不会让我标记作业。如何从BitInputStream中读取每个字符的位数随每个字符的变化而变化
你好,我正在学校项目中使用霍夫曼编码来压缩文件中的数据。在这个任务中,您应该使用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.");
}
...其中@参数中是通用的输入流对象和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位)。我想知道如果我不得不改变它试图读取的位数(以及我怎么会这样做),或者如果我以错误的方式来到这里(我最近才习惯了使用位/字节,可能有些重要的东西我不知道)。
对于冗长的问题,我表示歉意,但是让我知道我是否忽略了任何重要的信息。谢谢!
欧普,你是对的。谢谢! – user2116710 2013-04-27 00:00:33
请标记为正确答案。 :-) – user0 2013-04-27 00:02:05