API から、メソッド write(int byte) はバイトを表す int を取る必要があるため、EOF が来ると -1 を返すことができます。ただし、次のことを行うことは可能です。
FileOutputStream fi = new FileOutputStream(file);
fi.write(100000);
数値がバイト範囲を超えているため、コンパイルしないと予想していました。JVM はそれを正確にどのように解釈しますか? 前もって感謝します。
OutputStream.write(int)
ドキュメントから:
指定されたバイトをこの出力ストリームに書き込みます。書き込みの一般契約では、1 バイトが出力ストリームに書き込まれます。書き込むバイトは、引数 b の下位 8 ビットです。b の上位 24 ビットは無視されます。
鉱山を強調します。
このメソッドはint
. また、100000は有効な整数リテラルであるため、コンパイルしないことには意味がありません。
EOF と -1 に関するその部分をどこで読みましたか?
このメソッドは、何らかの理由で int として渡される1 つの byte を書き込むだけです。
指定されたバイトをこの出力ストリームに書き込みます。書き込みの一般契約では、1 バイトが出力ストリームに書き込まれます。書き込むバイトは、引数 b の下位 8 ビットです。b の上位 24 ビットは無視されます。
数値がバイト範囲を超えているため、コンパイルしないと予想していました
いいえ、これは問題なくコンパイルされます。コンパイラは単にint
. (Along
はコンパイルされません)。
最下位 8 ビット以外はすべて無視されます。