我想知道,如何在 Java 虚拟机中实现套接字。
- 是否包含本机库?
- 如果,它是一个 C 库吗?
我在哪里可以找到有关此主题的信息?关于网络的官方 Java 教程对我没有帮助。
一些有趣的链接会有所帮助。
更新:Sun 是否提供了任何官方信息?
提前致谢!
编辑 我找到了一个证明,我将我的答案标记为正确的。感谢奥斯卡,这对我来说是完美的暗示!!!谢谢!
我想知道,如何在 Java 虚拟机中实现套接字。
我在哪里可以找到有关此主题的信息?关于网络的官方 Java 教程对我没有帮助。
一些有趣的链接会有所帮助。
更新:Sun 是否提供了任何官方信息?
提前致谢!
编辑 我找到了一个证明,我将我的答案标记为正确的。感谢奥斯卡,这对我来说是完美的暗示!!!谢谢!
可能是使用了底层平台暴露的system-V socket调用,比如Unix下的system-V,Windows下的WinSock。该规范仅规定了虚拟机必须如何运行,因此实现者可以自由地为所欲为。
Java 是开源的,因此您可以获取源代码以自定进度深入检查该类。
作为对您问题的开始和快速回答,这是我在快速扫描中发现的内容:
private native void socketConnect(InetAddress address, int port, int timeout)
所以是的,包含了一个本地库,我猜它是一个 C++ 库。
有许多实现(SSLSocket、PlainSocket 等)
JDK7 的在线资源在这里 :S不知道它是最新的
我使用我的 IDE 来浏览每个 JDK 安装附带的源代码。
显示 Socket 来源的 IDE 截图 http://img83.imageshack.us/img83/5358/socketimpfv3.png
在Java 1.4.2 的网络指南中,提供了一条有趣的信息:
实施细则...
...你不需要知道,除非你继承了 SocketImpl/DatagramSocketImpl。每个 *Socket 对象都有一个底层的 SocketImpl/DatagramSocketImpl 来连接本地代码。Impl 类实现了两种方法来支持选项:
void setOption(int optID, Object val) 抛出 SocketException;对象 getOption(int optID) 抛出 SocketException;
看起来很像 C。这些方法充当本机方法的粘合剂,并在调用本机方法之前确保类型安全。
所以我认为它是经过验证的:Java 使用本地库作为套接字。