Javaはどのようにエンディアンを処理しますか?リトルエンディアンからビッグエンディアンへ、またはその逆にアプリケーションを移動する場合。 クラスのデータメンバーまたはプロパティはどのように影響を受けますか?Javaとendianness
答えて
を明確にするために編集しました。古いコアライブラリはネットワークオーダーを想定しています。
ByteBuffer
より:
バイナリデータへのアクセス
このクラスは、ブールを除き、他の全てのプリミティブ型の読み書きの値のための方法を定義します。プリミティブの値は、バッファの現在のバイトオーダーに従って、バイトのシーケンスに変換されます(またはシーケンスから変換されます)。特定のバイトオーダーは、ByteOrderクラスのインスタンスで表されます。バイトバッファの最初の順序は常にBIG_ENDIANです。
およびByteOrder
は、作業中のプラットフォームのnative orderへのアクセスを提供します。
はDataInput
年上に地元のネイティブサービスとの相互運用のために有用ではないであることを比較します
は4バイトの入力データを読み込んで、int型の値を返します。 a-dを最初から4バイト目まで読み込ませる。戻り値は次のとおり
(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
Java仮想マシンは、Java内で完全に作業している限り、心配する必要がないように、この考慮事項を抽象化しています。バイト順を考慮する必要がある唯一の理由は、Java以外のプロセスなどと通信している場合です。
編集:あなたがByteBuffer
上で、より大きなタイプのバッファをマッピングしているなら、あなたはByteOrder
値を使用して、エンディアンを指定することができ文言
downvoteする必要があります。 endiannessについて心配するもう一つの主要な時間があります。これは、あなたが異なるendinessを持つJava以外のアプリケーションによって書き出されたバイナリファイルを扱うときです。 endinessは言葉ですか? :-) – user949300
答えが改訂されたので、解読してはいけません。 –
@ user949300「java以外のプロセスと通信する」という見出しの下にあるとは言っても、あなたの言うことは真実です。 – nonVirtualThunk
クラスファイルフォーマット自体はビッグエンディアン(またはむしろ、クラスファイル内のすべての複数バイトのデータは、このような方法で格納されている):
すべての16ビット、32ビット、および64ビットの量は、それぞれ2つ、4つ、8つの連続した8ビットのバイトを読み取ることによって構成されます。マルチバイトのデータ項目は、常にビッグエンディアンの順序で格納され、上位バイトが最初に来ます。
しかし、実際には他の人に言われているように、これについてほとんど心配する必要はありません。
- 1. Endianness on DataInputStream
- 2. endianness安全なバイナリデータのコピー
- 3. C++ ByteをIntegerとして読み込む方法endianness independent?
- 4. バイト配列をin_addrまたはin6_addrとendiannessに変換する
- 5. Big Endiannessについて心配すべきですか、それとも些細なことですか?
- 6. Java Javaサーバーのページとnetbeans
- 7. RESTクライアント:JavaバックエンドコンシューマとJavaスクリプトコンシューマ
- 8. Java DesktopアプリとJava EE?
- 9. JAXBとJava 1.6のJavaエラー
- 10. JavaのAndroidプログラミングとJavaスクリプト
- 11. のJavaポストインクリメントとプレインクリメントJavaで
- 12. AndroidとJavaとデータクラス
- 13. JavaとSQL:ResultSetMetaDataとResultSet
- 14. シリアライゼーションとポインタJava
- 15. Javaゲームプログラミングとスレッド
- 16. Facebook apiとjava
- 17. JavaとJDialogs
- 18. JavaとUbuntuの
- 19. MathMLとJava
- 20. Java - アップキャスティングとダウンキャスト
- 21. Java classLoaderとgetResourceAsStream
- 22. JavaとCucumber + Ivy
- 23. Java(J2SE)とBluetooth
- 24. mod_pagespeedとJavaアプリケーションサーバー
- 25. Java Faceletsとセッション?
- 26. JavaネットワークサーバーとTIME_WAIT
- 27. モデルビューコントローラとJava
- 28. HibernateとJavaヒープスペースエラー
- 29. JavafxとJava
- 30. OpenJDKとJava HotspotVM
エンドエンディアンは、生データを読み書きする場合にのみ重要です。ネットワークインターフェースまたはディスク。 –
@OliCharlesworth、またはデータをIPC経由で、あるいはパイプ経由で、またはファイルから受信していますか...データを読み書きしているときはいつでも、もう片方のものはjavaではありません。 –