1.RMI
- RMI:Remote Method Invocation 远程方法调用
- 两个位于不同 JVM 虚拟机的 Java 程序互相请求访问
RMI 的参数和返回值
- (自动化) 传递远程对象(实现 Remote 接口) - 当一个对远程对象的引用从一个 JVM 传递到另一个 JVM,该远程对象的发送者和接收者将持有同一个实体对象的引用。这个引用并非是一个内存位置,而是由网络地址和该远程对象的唯一标识符构成的。
###两个 JVM 拥有同一个对象### - (自动化) 传递可序列化对象(实现 Serializable 接口) - JVM 中的一个对象经过序列化后的字节,通过网络,其副本传递到另一个 JVM 中,并重新还原为一个 Java 对象。
###每个 JVM 拥有自己的对象###
1 | // Client |
- RMI 优点
- 跨平台分布式对象调用
- 完全对象支持
- 安全策略
- RMI 缺点
- 双方必须是 Java 语言实现
- 不如消息传递协作方便
2.JNI
- JNI,Java Native Interface
- Java 和本地 C 代码进行互操作
- Java 调用 C 程序完成一些需要快速计算的功能(常见,重点)
- C 调用 Java 程序(基于反射的方法)
基本步骤
- 在 Java 类中声明一个本地方法,使用 native 函数
1 | class HelloNative { |
- 调用 javac.exe 编译,得到 HelloNative.class
- 调用 javah.exe 得到包含该方法(Java_HelloNative_greeting)的头文件 HelloNative.h
- 实现.c 文件(对应 HelloNative.h)
1 |
|
- 将.c 和.h 文件,整合为共享库(DLL)文件
- 在 Java 类中,加载相应的共享库文件
1 | HelloNative.greeting(); |
3.Nashorn
- 脚本引擎,ScriptEngine
- Nashorn,JDK 8 自带的 JS 解释器(JDK6/7 是 Rhino 解释器)
1 | ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn") |
- 主要方法
- eval,执行一段 js 脚本. eval(String str), eval(Reader reader)
- put,设置一个变量
- get,获取一个变量
- createBindings, 创建一个 Bindings
- setBindings, 设置脚本变量使用的范围
1 | // Test1 |
JDK 支持的脚本引擎工厂
| 引擎 | 名字 | MIME 类型 | 文件扩展 |
|---|---|---|---|
| Nashorn | nashorn,js | text/javascript | js |
| Groovy | groovy | 无 | groovy |
| Renjin | Renjin | text/x-R | R,r,S,s |
| SISC Scheme | sisc | 无 | scheme,sisc |
4.Jython
- Jython 是 Python 语言在 Java 平台的实现
- Jython 是在 JVM 上实现的 Python,由 Java 编写
- Jython 将 Python 源码编译成 JVM 字节码,由 JVM 执行对应的字节码,因此能很好的与 JVM 集成
- Jython 并不是 Java 和 Python 的连接器
关键类
- PythonInterpreter
- exec 执行语句
- set 设置变量值
- get 获取变量值
- execfile 执行一个 python 文件
- PyObject
- PyFunction
1 | // 执行Python程序语句 |
5. Web Service
- 由万维网联盟(W3C, World Wide Web Consortium)提出
- 消除语言差异、平台差异、协议差异和数据结构差异,成为不同构件模型和异构系统之间的集成技术
- Web Service 是为实现跨网络操作而设计的软件系统,提供了相关的操作接口,其他应用可以使用 SOAP 消息,以预先指定的方式来与 Web Service 进行交互
wsimport 工具
- %JAVA_HOME%\bin 目录下
- 根据 wsdl 文档,自动产生客户端中间代码
1 | wsimport -keep -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL |
基本步骤
- 调用 wsimport 所产生客户端中间代码
- 提供相应参数
- 获取返回结果
1 | /** |
- Java 调用 Web Service 其他办法
- Axis/Axis2 (axis.apache.org)
- 采用 URLConnection 访问 Web Service
- 采用 HttpClient 访问 Web Service
6.命令行
Runtime
- Java 提供 Runtime 类
- exec 以一个独立进程执行命令 command, 并返回 Process 句柄
- 当独立进程启动后,需要处理该进程的输出流/错误流
- 调用 Process.getInputStream 可以获取进程的输出流
- 调用 Process.getErrorStream 可以获取进程的错误输出流
- 调用 Process.waitFor 等待目标进程的终止(当前进程阻塞)
1 | Process p; |
Leave a comment