JAva–なぜInputStream#read()はバイトではなくintを返すのですか?
1024 ワード
これは面白い問題なので、ここで記録します.
まずバイトはちょうど8ビットなので、8ビットのcharタイプのデータを使ってバイトデータと一つ一つ対応するのが一番いいですか?しかし、なぜメソッド
まず、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?
まずバイトはちょうど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つのデータ型を除きます.
したがって、実際には、単一の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?