FileOutputStream の write() メソッドは int を取りますが、最初の 3 バイトを切り捨て、そのバイトをストリームに書き込みます。ファイルに ASCII 値が 127 を超える文字が含まれており、そこからバイトが読み取られて出力ストリーム (別のテキスト ファイル) に書き込まれる場合、Java ではバイトの最大値が +127 になる可能性があるため、どのように表示されますか。
テキスト ファイル (input.text) に ASCII 値が 155 の文字 '›' が含まれている場合、入力ストリーム、input はそれから読み取ります。
int in= new FileInputStream("input.txt").read();//in = 155
これで、別のテキスト ファイル (output.txt) に書き込みます。
new FileOutputStream("output.txt").write(in);
ここで、整数 "in" は、対応する 10 進数値 -101 を持つバイトに切り捨てられます。キャラクターに関する情報が失われたように見えるにもかかわらず、どのようにしてキャラクターをファイルに書き込むことができたのでしょうか?
ちょうど今、私は Java ドキュメントで write(int) メソッドの説明を調べましたが、私が観察したのは
書き込みの一般契約では、1 バイトが出力ストリームに書き込まれます。書き込むバイトは、引数 b の下位 8 ビットです。b の上位 24 ビットは無視されます。
したがって、以前に考えたこととは反対に(127より大きい値の整数をバイトにダウンキャストするときに発生するように、write()のintが切り捨てられます)、上位24ビットのみが無視され、最下位8ビットのみが考慮されると思います. 切り捨てやバイトへの変換は行われません。私は正しいと思います。