Java では、整数をファイルに書き込み、符号なし 8 ビット整数 (0 から 255 の範囲内) になるようにするにはどうすればよいですか? 数値が int 型で 0 ~ 255 の範囲内であれば十分ですか、それとも最初に他の型に変換する必要がありますか? 私はそれがちょうど同じことだと思いますか?しかし、それらがファイルに配置されたときに何か面白いことが起こるかどうかはわかりません...
2 に答える
符号付きと符号なしは、ビットパターン自体ではなく、ビットパターンがどのように解釈されるかだけの問題です。
0
したがって、整数がからの範囲内にある限り、整数255
をバイトに詰め込んでファイルに書き込むことができます。
ただし、Javaはバイトビットパターンを署名付きとして解釈するため、それらを読み戻すときは注意が必要です。
たとえば、整数があるとします253
。これは(完全な32ビット形式で):
00000000000000000000000011111101
もし、するなら:
int i = 253;
byte b = (byte) i;
次にb
、ビットが含まれます。
11111101
Javaにこれを使用するように依頼すると、Javaは-3
、ビットを符号付きとして解釈するときに-3
、パターンとして表されるためだと主張します11111101
。したがって、そのバイトをファイルに書き込むと、必要に応じてビット11111101
が書き出されます。
同様に、ファイルを読み取るときにバイトに読み戻すと、読み取ったバイトはビットパターン11111101
で埋められます。これも、Javaが。として解釈し-3
ます。だからあなたはただすることはできません:
byte b = readByteFromFile();
int i = b;
Javaはのb
内容を次のように解釈し、32ビット整数として-3
表す整数を提供するためです。-3
11111111111111111111111111111101
代わりに、最終的に整数が次のようになるように、マスクを解除する必要があります。
00000000000000000000000011111101
それで、
byte b = readByteFromFile();
int i = (0x000000FF) & b;
DataOutputStream.writeByte()
int
を1 バイト値として書き込みます。