有没有java“平台不可知论”可能失败的情况?

时间:2012-09-07 14:17:24

标签: java compilation platform-agnostic

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

我知道平台不可知论可能会在java世界中受到影响的一些条件。

  1. 与文件系统交互的代码
  2. 在代码中使用平台相关库。
  3. 还有浮点数
  4. 还有更多java平台不可知论可能会失败的情况吗? 假设我在Solaris上编译的文件可能无法在RedHat Linux上运行。

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

3 个答案:

答案 0 :(得分:2)

平台特定方法,例如

  • Runtime.exec()是特定于平台的。
  • 阳光下的任何东西。*或com.sun。*可能存在也可能不存在,或做同样的事情。
  • 某些系统属性应根据系统而有所不同。例如有一个应用程序预计某些供应商在VM供应商更改为Oracle时失败。 ;)
  • 依赖于System.getenv()
  • 的任何内容
  • 使用本机库

答案 1 :(得分:1)

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

另外,我认为OS文件锁定是不同的,例如在Windows上,您可能会被阻止/拒绝访问UNIX上您不会访问的内容。

答案 2 :(得分:0)

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

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