- ベストアンサー
1ビットづつ読みこみ、というのは可能でしょうか?
バイナリファイルを1ビットづつ読みこみ、 それぞれの値が0か1かを判定するプログラムを javaで作成しようと思っています。 バイナリファイルを1ビットづつ読みこむというのは可能なのか。 それをするためにはどのようなクラスを使用し、どのようなロジックを 組み立てれば良いのか教えてください。 よろしくおねがいいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まだJAVAはエキスパートではありませんが、バイト単位以下の読み書きの命令というのは、JAVAはおろか、他の言語でも見たことはありません。 理論上は可能なはずですが、一般的に今のコンピュータは1bitづつは扱わず、8bitや16bit、32bit、64bit、128bitくらいの単位で処理しています。その為読み込みの単位もバイト単位になっているのではないかと思います。 その為、本当にbit単位で読み込みたいというのならば、APIも使わず100%マシン語で、I/Oポートを直接操作する様なシステムでないとムリの様な気がします。 実際そこまでする必要性は、あまり感じられません。 実際には、bitの情報を読みたい場合には、バイト単位で読み込んで、8bit一辺に処理します。スピードも別に問題ないと思います。 実際に1バイトから8ビットの内容を読み込むには、AND演算子を使ってフィルタをかけ、目的のビットを持ってきます。 00101010 ←1バイトの2進数表現 AND 00000001 -------- 00000000 = 0 00101010 AND 00000010 -------- 00000010 != 0 00101010 AND 00000100 -------- 00000000 = 0 00101010 AND 00001000 -------- 00001000 != 0 こんな感じのアルゴリズムです。実際には10進数か16進数で行います。 00000001 = 1 00000010 = 2 00000100 = 4 00001000 = 8 00010000 = 16 00100000 = 32 01000000 = 64 10000000 = 128 (00101010) = 42 かな これを、42&1が0じゃないならば1bit目は1。42&2が0じゃないならば2bit目は1。42&4が0じゃないなら3bit目は1。 と言う風に繰りかえしていきます。 私はこんな感じでやっています。違うやり方があるのかも知れませんが…
お礼
たいへんご丁寧な説明、ありがとうございました。 バイト単位で読みこんで、ビット演算子を使えば良いんですね。参考になりました。