0

API から、メソッド write(int byte) はバイトを表す int を取る必要があるため、EOF が来ると -1 を返すことができます。ただし、次のことを行うことは可能です。

FileOutputStream fi = new FileOutputStream(file);
    fi.write(100000);

数値がバイト範囲を超えているため、コンパイルしないと予想していました。JVM はそれを正確にどのように解釈しますか? 前もって感謝します。

4

2 に答える 2

5

OutputStream.write(int)ドキュメントから:

指定されたバイトをこの出力ストリームに書き込みます。書き込みの一般契約では、1 バイトが出力ストリームに書き込まれます。書き込むバイトは、引数 b の下位 8 ビットです。b の上位 24 ビットは無視されます。

鉱山を強調します。

このメソッドはint. また、100000は有効な整数リテラルであるため、コンパイルしないことには意味がありません。

于 2013-07-28T08:49:51.107 に答える
1

EOF と -1 に関するその部分をどこで読みましたか?

このメソッドは、何らかの理由で int として渡される1 つの byte を書き込むだけです。

指定されたバイトをこの出力ストリームに書き込みます。書き込みの一般契約では、1 バイトが出力ストリームに書き込まれます。書き込むバイトは、引数 b の下位 8 ビットです。b の上位 24 ビットは無視されます。


数値がバイト範囲を超えているため、コンパイルしないと予想していました

いいえ、これは問題なくコンパイルされます。コンパイラは単にint. (Alongはコンパイルされません)。

最下位 8 ビット以外はすべて無視されます。

于 2013-07-28T08:50:09.067 に答える