1

Javaは符号なし整数型をサポートしていないとJavaの符号なし整数を表現する最も簡単な方法は、より大きな整数型を使用していません。
DataInputインターフェイスには、shortreadUnsignedShortを返し、intを返す符号なし整数型を読み取るメソッドが用意されています。なぜJavaでインタフェースDataInputはreadUnsignedIntメソッド

readUnsignedIntこのインターフェイスでは、longを返すメソッドがないのはなぜですか?何か特別な理由はありますか?

明確化:私は、符号なし演算のJava 8サポートについて認識しています。問題はこの問題に対処する方法ではなく、DataInputインターフェイスにそのようなメソッドがない理由です。

+0

'int'を読んで、それをunsignedとして扱うことができるので、これはJavaの符号なしの値を扱う標準的な方法ですか? –

+0

あなたは 'short'でもこれを行うことができますが、このインターフェースにはメソッドがあります。 – meltedspark

+0

それはちょうど奇妙です。 –

答えて

0

DataInput/DataOutputには、各プリミティブとStringのメソッドがあります。

unsigned intは原始的ではありませんが、それが追加されましたので、次の操作を行うことができます。このインターフェースは、長い返すreadUnsignedIntメソッドを持っていないのはなぜ

long a = dis.readInt() & 0xFFFF_FFFFL; 

dos.writeInt((int) a); 

元のデザイナーは、あなたが1つを必要としていないと思うか、unsigned intタイプを追加したと思います。

いずれかの特定の理由はありますか?

あなたが追加することができるものがたくさんあります(そして私のライブラリには便利だと思うので追加しました)が、デザイナーはもっと少ないと思っていました。

+0

私はあなたの要点を理解していますが、なぜ彼らは 'readUnsignedByte'メソッドと' readUnsignedShort'メソッドを追加しましたか?必要に応じて 'readUnsignedInt'とどう違うのでしょうか?それは、「あまり良くない」アプローチ以上のものがあると私に思い出させます。しかし、私は実際の理由が何であるかという手掛かりはありません。 – meltedspark

+1

@binyan fair point。それは矛盾している。私は 'readUnsignedByte'と' Short'が 'int'を返すからです。 「長い」を返すことは、まさに跳躍ではありません。 –

2

は私がなぜわからないが、今、符号なし整数型のサポートがあるので、それはもはや問題です。できますdo

long a = Integer.toUnsignedLong(r.readInt()); 
+0

はい、私はそれを認識しています。しかし問題は実際に問題を扱うことではなく、この特定のインターフェースについてです。とにかく、応答に感謝します。 – meltedspark

+2

@binyan十分に公正な - 私はあなたの質問ではなかったことを認識します。あなたは言語デザイナーに尋ねなければならないでしょう。このインタフェースはJava 1.0に戻っているため、知る人は非常に少数です。私の推測では、インターフェイスにできるだけ少ないメソッドを持たせたいと考えています。 –

関連する問題