2

我已经使用 java 很长时间了,但这个问题最近出现在我的脑海中,从那以后一直困扰着我。

我知道某些情况下平台不可知论可能会在 Java 世界中受到影响。

  1. 与文件系统交互的代码
  2. 在代码中使用平台相关库。
  3. 还有浮点数

是否还有更多 Java 平台不可知论可能失败的情况?假设我在 Solaris 上编译的文件可能无法在 RedHat Linux 上运行。

对此主题的任何帮助表示赞赏。

4

3 回答 3

2

平台特定的方法,例如

  • Runtime.exec() 是特定于平台的。
  • sun.* 或 com.sun.* 下的任何东西可能存在也可能不存在,或者做同样的事情。
  • 一些系统属性应该因系统而异。例如,有一个应用程序期望某些供应商在 VM 供应商更改为 Oracle 时失败。;)
  • 任何依赖于 System.getenv()
  • 使用本机库
于 2012-09-07T14:21:11.870 回答
1

您需要小心路径,例如在 Windows 和 UNIX 之间使用 \ 和 / 是自找麻烦。此外,换行符可能很棘手:Windows 是 CR+LF,UNIX 只是 CR(如果我没记错的话)。Java 确实提供了处理此类问题的机制,但天真的/新开发人员可能会错过它们。

此外,我相信操作系统文件锁定是不同的,例如在 Windows 上,您可能会被阻止/拒绝访问某些在 UNIX 上您不会的东西。

于 2012-09-07T14:23:40.570 回答
1

一些不依赖于平台的库使用 JVM 默认值。例如,如果您在两台机器上请求AES ,JVM 可能会选择不同的加密算法。在这种情况下,您应该在选择算法时更加具体,例如AES/ECB/PKCS5Padding。请参阅Java 默认加密/AES 行为

所以一般来说,当文档说有一些默认值并且不要使用defaults时要小心。

于 2017-06-29T06:50:48.467 回答