JAva–なぜInputStream#read()はバイトではなくintを返すのですか?

1024 ワード

これは面白い問題なので、ここで記録します.
まずバイトはちょうど8ビットなので、8ビットのcharタイプのデータを使ってバイトデータと一つ一つ対応するのが一番いいですか?しかし、なぜメソッドInputStream#read()はintタイプ値を返す必要があるのでしょうか.
まず、EOFを完成させます(End of File)は、Javaでは-1でデータが読み終わったことを示しているが、返されるcharタイプの値であれば、-1という値は全くないと判断し、言い換えれば、charの-1のような特殊なchar値を返すと、この文字が占有され、果バイトデータが-1の値に適切に対応していると、正しく読み出せず、i字と誤認されるセクションデータが読み上げられたのは,intタイプ値を返すためであり,もちろんバイトデータはint表現に変換され,24ビットの高い布ゼロが必要である.
次に、上記のようなニーズである以上、なぜshort値を返さないのでしょうか.
実際にJavaメモリモデルではshortおよびintタイプの値に対して32ビットのメモリ領域を占めている.Java仮想マシンは、オフセット量(実際には32ビットの元のセルサイズの倍数)を使用してスタックとオブジェクトフィールドをモデリングします.したがって、ローカル変数またはオブジェクトフィールドを1バイトとして宣言すると、変数/フィールドはintのように32ビット単位に格納されます.次の2つのデータ型を除きます.
  • longとdoubleは2つの32ビットで表す必要があります.
  • 基本タイプの配列も例外であり、例えば、バイト配列は32ビットごとに4バイトを含む.

  • したがって、実際には、単一のshort値とint値の表現に違いはありません.一連のshort値、すなわちshort配列でない限り、int値よりも有効である可能性があります.すなわち、このアプリケーションでint/shortタイプを返さないデータには違いがないので、実際のメモリモデルを表すintタイプ値を使用してもよい.
    参考:In java,is it more efficient to use byte or short instead of int and float instead of double?