申し訳ありませんが、宿題にタグを付けることはできません。
こんにちは。ハフマン コーディングを使用してファイルからデータを圧縮する学校のプロジェクトに取り組んでいます。この課題では、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' など) と出力されます。たとえば、ビット単位の「a」のASCII値は1100001(7ビット)で、スペースは100000(6ビット)であるため、これは一度に8ビットを読み取ろうとすることに関係があると思います。読み取ろうとしているビット数をどうにかして変更する必要があるのか (そして、一体どうやってそれを行うのか)、それとも間違った方法でこれに到達しているのか(私は
長い質問で申し訳ありませんが、重要な情報が抜けていたら教えてください。ありがとう!