実際のアプリでショートおよびバイトのプリミティブ型を使用している人はいますか?

StackOverflow https://stackoverflow.com/questions/402247

  •  03-07-2019
  •  | 
  •  

質問

私は 2004 年から Java でプログラミングを行っており、主にエンタープライズ アプリケーションと Web アプリケーションを担当しています。でも使ったことない 短い または バイト, 、これらのタイプがどのように機能するかを知るためだけにおもちゃのプログラムを除いて。たとえ for ループ 100 回のうち、通常は 整数. 。そして、これを利用したコードに出会ったかどうかは覚えていません。 バイト または 短い, 、一部のパブリック API およびフレームワークを除きます。

はい、わかりました。 短い または バイト メモリの節約が実際に重要な状況で、大規模な配列でメモリを節約します。それを実践したい人はいますか?あるいは、それは単に本に載っているものです。

[編集済み]

使用する バイト ネットワーク プログラミングとソケット通信のための配列は非常に一般的な使用法です。ダレン、指摘してくれてありがとう。さてどうですか 短い?ライアンは素晴らしい例を示しました。ありがとう、ライアン。

役に立ちましたか?

解決

Javaは、メモリがはるかに限られているモバイルデバイスでも使用されることに注意してください。

他のヒント

バイトをたくさん使います。通常、バイナリデータのネットワーク通信用のバイト配列またはByteBufferの形式。

floatまたはdoubleを使用することはめったになく、shortを使用したことはないと思います。

画像圧縮(つまり、白黒ビットマップの各バイトで圧縮アルゴリズムを実行)などの機能を実装し、バイナリを処理するC / C ++コードで「バイト」を多く使用しましたネットワークメッセージ(メッセージ内のバイトを解釈することにより)。

ただし、「float」または「double」を使用したことはほとんどありません。

私が彼らのために見た主な使用法は、未知の構造または実際の構造さえないデータを処理しているときです。ネットワークプログラミングは前者の例です(データを送信する人はその意味を知っていますが、あなたはそうではないかもしれません)、256色(またはグレースケール)画像の画像圧縮のようなものは後者の例です。

頭の先にあるgrepは、あらゆる種類のファイルコピーと同様に、別の用途として思い浮かびます。 (もちろん、OSはそれを行いますが、時にはそれで十分ではありません。)

Java言語自体は、 byte または short タイプを使用するのを不当に困難にします。 byte または short の値に対して操作を実行するたびに、Javaはまずそれを int にプロモートし、操作の結果は次のように返されます。 int 。また、それらは署名されており、署名されていない同等物はありません。これは、フラストレーションのもう1つの頻繁な原因です。

つまり、 byte を大量に使用することになります。これは、サイバーのすべての基本的なビルディングブロックであるためです。しかし、 short タイプも存在しない可能性があります。 >

今日まで、それらを使用することがめったにありません。

ネットワーク関連のものにはバイトを使用しましたが、ほとんどの場合、バイトは自分のツール/学習用でした。作業プロジェクトでは、これらのことはフレームワーク(たとえばJSP)によって処理されます

短い?ほとんどありません。

長い?どちらでもない。

優先する整数リテラルは、int、forループ、カウンターなどです。

データが別の場所(たとえばデータベース)から来る場合、適切な型を使用しますが、リテラルには常にintを使用します。

私はさまざまな場所でバイトを使用しますが、主に低レベルのデータ処理が関係します。残念なことに、Java 言語の設計者はバイトに署名を付けました。負のバイト値を持つことが役立つ状況は思いつきません。0 ~ 255 の範囲があればもっと便利です。

適切なコードで short を使用したことがないと思います。また、float は決して使用しません (浮動小数点値が必要な場合は、常に double を使用します)。

同意する トム. 。理想的には、高級言語では、基礎となるマシン表現を気にすべきではありません。独自の範囲を定義したり、任意の精度の数値を使用したりできる必要があります。

携帯電話などの電子デバイス用にプログラミングする場合、バイトとショートを使用します。この場合、メモリ管理に注意する必要があります。

intのセマンティクスを見ると、おそらくもっと面白いでしょう。これらのarbitrary意的な制限とサイレントトランケーションはあなたが望むものですか?アプリケーションレベルのコードでは、実際に任意のサイズの整数が必要なため、Javaにはそれらを合理的に表現する方法がないだけです。

モデルのチェック中に状態を保存するときにバイトを使用しました。そのアプリケーションでは、余分な作業をするだけでスペースを節約できます。それ以外の場合は使用しません。

低レベルの画像処理を行うときにバイト変数を使用していたことがわかりました。 .Net GDI +の描画ルーチンは非常に低速だったため、自分でハンドロールしました。

ただし、ほとんどの場合、問題の制約があるため、より大きなものを使用することを余儀なくされない限り、符号付き整数に固執します。精度を必要としない場合でも、私が通常行うあらゆる種類の物理モデリングには、floatまたはdoubleが必要です。

Apache POI short を何度も使用していました。おそらく、Excelの行/列数の制限が原因です。

数ヶ月前、彼らは int に変更しました

createCell(short columnIndex )

with

createCell(int列)

インメモリデータグリッドでは、便利な場合があります。 Gemfireのようなデータグリッドの概念は、巨大な分散マップを持つことです。 十分なメモリがない場合、LRU戦略でディスクにオーバーフローできますが、マップのすべてのエントリのキーはメモリに残ります(少なくともGemfireでは)。

したがって、特に非常に大きなデータセットを処理する場合は、小さなフットプリントでキーを作成することが非常に重要です。 エントリ値については、可能な場合は、小さなメモリフットプリントで適切なタイプを使用することをお勧めします...

JavaアプリでカスタムUSBまたはシリアルマイクロコントローラーと通信するショートとバイトを使用して、ショートとして2バイトでラップされた10ビット値を受信しました。

byte sおよび short sは、Java Card開発で広く使用されています。 Javaバイトプリミティブ型の実際の用途はありますか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top