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