2

私は長い間Javaを使用してきましたが、この質問が最近頭に浮かび、それ以来私を悩ませてきました。

私は、プラットフォームの不可知論がJavaの世界で影響を受ける可能性があるいくつかの条件について知っています。

  1. ファイルシステムとの相互作用のためのコード
  2. コードでプラットフォームに依存するライブラリを使用します。
  3. また、浮動小数点数

Javaプラットフォームの不可知論が失敗する可能性のあるケースは他にありますか?SolarisでコンパイルされたファイルがRedHatLinuxで実行できない場合があるとします。

このトピックに関するヘルプをいただければ幸いです。

4

3 に答える 3

2

などのプラットフォーム固有のメソッド

  • Runtime.exec()はプラットフォーム固有です。
  • sun。*またはcom.sun。*の下にあるものは、そこにある場合とない場合があります。または同じことを行います。
  • 一部のシステムプロパティは、システムによって異なると想定されています。たとえば、VMベンダーがOracleに変更されたときに失敗する特定のベンダーを予期していたアプリケーションが1つありました。;)
  • System.getenv()に依存するもの
  • ネイティブライブラリの使用
于 2012-09-07T14:21:11.870 に答える
1

パスに注意する必要があります。たとえば、WindowsとUNIXの間で\および/を使用すると、問題が発生します。また、改行は注意が必要な場合があります。WindowsはCR + LF、UNIXはCRだけです(正しく思い出せば)。Javaはそのような問題を処理するメカニズムを提供しますが、ナイーブ/新しい開発者はそれらを見逃す可能性があります。

また、OSファイルのロックは異なると思います。たとえば、Windowsでは、UNIXではアクセスできないものへのアクセスがブロック/拒否される可能性があります。

于 2012-09-07T14:23:40.570 に答える
1

プラットフォームに依存しない一部のライブラリは、JVMのデフォルトを使用します。たとえば、2台のマシンでAESを要求した場合、JVMは異なる暗号化アルゴリズムを選択する可能性があります。この場合、アルゴリズムを選択するときは、AES / ECB/PKCS5Paddingなどのように具体的にする必要があります。Javaのデフォルトの暗号化/AES動作を参照してください。

したがって、一般的に、ドキュメントにデフォルトがあり、デフォルトを使用しないと記載されている場合は注意が必要です。

于 2017-06-29T06:50:48.467 に答える