我有 C/C++ 背景,现在做很多 C# 的工作。

最近,自从使用了 Android SDK 以来,我对用 Java 做一些项目产生了兴趣。

我知道 Java 应用程序在沙箱中运行,这会限制它们对系统的访问。

在桌面/服务器应用程序环境中哪些内容受到限制?

有帮助吗?

解决方案

对于普通的桌面和服务器应用程序,这些限制与沙箱概念无关(尽管您可以使用它来应用非常细粒度的限制,例如用户提交的代码),但是 Java 的平台无关性。基本上,特定于操作系统的内容和硬件访问通常无法在纯 JAVA 中完成,除非 API 库专门解决。

例子有:

  • Windows注册表
  • Windows系统托盘
  • 蓝牙
  • 无线网络配置

其他提示

Java 应用程序位于沙箱中,就像 .NET 应用程序位于沙箱中一样。它们都在各自的虚拟机上运行,​​并且在可以执行的操作方面确实有一些限制,但在大多数情况下,它们对系统具有大量访问权限,包括通过某些调用访问本机代码。

您可能正在考虑 Java 小程序, ,它在浏览器内运行,通常位于安全沙箱中,防止访问本地文件等系统资源。(可以通过专门向某些小程序授予对系统的访问权限来规避此限制。)

这是关于 安全限制 对于来自的小程序 Java 教程, ,其中包括对小程序施加的限制列表。

典型台式机和服务器应用程序在禁用安全运行。但是,Java和JVM仍然具有坚固的类型的系统,所以可以不例如转换为一个对象不是用创建类型,不能访问已释放的内存,并且不能流掉缓冲器的末尾。

我想你可能会看到的主要限制,是能够为 容易使用本地系统,如果API的你需要的,例如,如果你需要使用一个USER32或从Java API KERNEL32我认为这是可能的,但是这不是一件容易的事做,但在C#是相当容易的事。

此外,如果你有一些传统的C / C ++ DLL的,你仍然可以使用他们在一个C#应用程序,而在Java仍难尤其是做,在最坏的情况下,当你的本机代码API已经使用指针,你可以使用在C#应用不安全模式传递指针和在栈上分配固定存储器...等

,但高于Java和C#一般如上所述是非常有特别是如果您靶向相同的限制存在平台无关的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top