5

Java では、整数をファイルに書き込み、符号なし 8 ビット整数 (0 から 255 の範囲内) になるようにするにはどうすればよいですか? 数値が int 型で 0 ~ 255 の範囲内であれば十分ですか、それとも最初に他の型に変換する必要がありますか? 私はそれがちょうど同じことだと思いますか?しかし、それらがファイルに配置されたときに何か面白いことが起こるかどうかはわかりません...

4

2 に答える 2

10

符号付きと符号なしは、ビットパターン自体ではなく、ビットパターンがどのように解釈されるかだけの問題です。

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;
于 2012-05-25T14:47:54.817 に答える
2

DataOutputStream.writeByte()intを1 バイト値として書き込みます。

于 2012-05-25T14:32:42.623 に答える