我已经使用 java 很长时间了,但这个问题最近出现在我的脑海中,从那以后一直困扰着我。
我知道某些情况下平台不可知论可能会在 Java 世界中受到影响。
- 与文件系统交互的代码
- 在代码中使用平台相关库。
- 还有浮点数
是否还有更多 Java 平台不可知论可能失败的情况?假设我在 Solaris 上编译的文件可能无法在 RedHat Linux 上运行。
对此主题的任何帮助表示赞赏。
我已经使用 java 很长时间了,但这个问题最近出现在我的脑海中,从那以后一直困扰着我。
我知道某些情况下平台不可知论可能会在 Java 世界中受到影响。
是否还有更多 Java 平台不可知论可能失败的情况?假设我在 Solaris 上编译的文件可能无法在 RedHat Linux 上运行。
对此主题的任何帮助表示赞赏。
平台特定的方法,例如
您需要小心路径,例如在 Windows 和 UNIX 之间使用 \ 和 / 是自找麻烦。此外,换行符可能很棘手:Windows 是 CR+LF,UNIX 只是 CR(如果我没记错的话)。Java 确实提供了处理此类问题的机制,但天真的/新开发人员可能会错过它们。
此外,我相信操作系统文件锁定是不同的,例如在 Windows 上,您可能会被阻止/拒绝访问某些在 UNIX 上您不会的东西。
一些不依赖于平台的库使用 JVM 默认值。例如,如果您在两台机器上请求AES ,JVM 可能会选择不同的加密算法。在这种情况下,您应该在选择算法时更加具体,例如AES/ECB/PKCS5Padding。请参阅Java 默认加密/AES 行为。
所以一般来说,当文档说有一些默认值并且不要使用defaults时要小心。