基于RMI的矩阵运算
程序员文章站
2022-03-05 14:47:42
...
Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
我们知道,RMI时java实现分布式的一种方式,虽然不是最好,但是确实最容易理解和掌握的方式。
关于矩阵,大姐可能都了解。用java来实现一个矩阵可是很麻烦的事。但是java凭借其强大的扩展性,有人专门为Java的开发了一款矩阵库。jama矩阵库
下面我们来看一下需求:
设计一个或者多个远程对象,能够计算矩阵加法、矩阵乘法以及矩阵数乘运算
在服务器端运行远程对象
定义一个矩阵类,可以表示任意的M*N矩阵
客户端通过RMI方法,将矩阵发送到服务端进行计算,服务端将结果返回客户端,客户端将结果显示在控制台。
这是一个矩阵类,继承自Jama.Matrix类
public class Matrix extends Jama.Matrix {
// Jama.Matrix实现了序列化接口
public Matrix(int i, int i1) {
super(i, i1);
}
public Matrix(int i, int i1, double v) {
super(i, i1, v);
}
public Matrix(double[][] doubles) {
super(doubles);
}
public Matrix(double[][] doubles, int i, int i1) {
super(doubles, i, i1);
}
public Matrix(double[] doubles, int i) {
super(doubles, i);
}
}
下面我们来定义一个矩阵运算接口
//设计一个或者多个远程对象,能够计算矩阵加法、矩阵乘法以及矩阵数乘运算
//全部方法返回为Object
继承自Remote接口要抛出RemoteException
public interface MatrixManipulation extends Remote {
/*矩阵加法
* */
Object matrixAdd(Matrix a, Matrix b)throws RemoteException;
/*矩阵乘法
* */
Object matrixMultiplication(Matrix a, Matrix b)throws RemoteException;
/*矩阵数乘
times为标量
* */
Object matrixScalar(Matrix a,double times)throws RemoteException;
}
然后我们看看接口实现类
/*继承UnicastRemoteObject实现构造方法,
实现矩阵运算操作接口
*返回Object为矩阵的克隆对象
* */
public class MatrixManipulationImpl extends UnicastRemoteObject implements MatrixManipulation {
private Matrix matrix;
protected MatrixManipulationImpl() throws RemoteException {
}
protected MatrixManipulationImpl(int port) throws RemoteException {
super(port);
}
protected MatrixManipulationImpl(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
super(port, csf, ssf);
}
@Override
public Object matrixAdd(Matrix a, Matrix b) throws RemoteException {
matrix=a.plus(b);
return matrix.clone();
}
@Override
public Object matrixMultiplication(Matrix a, Matrix b) throws RemoteException {
matrix=a.times(b);
return matrix.clone();
}
@Override
public Object matrixScalar(Matrix a, double times) throws RemoteException {
matrix=a.times(times);
return matrix.clone();
}
}
最后是服务端
public class Operator {
// 服务端
private static MatrixManipulation manipulation;
public static void main(String[] args) {
// i:行,i1:列;【行是水平方向的一横行bai,列是垂直方向上的一竖列du】
try {
// 实例化
manipulation=new MatrixManipulationImpl();
// 实例化注册表,监听9999端口
Registry registry= LocateRegistry.createRegistry(1099);
// 绑定远程对象
registry.rebind("manipulation",manipulation);
System.out.println("RMI服务端运行......");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
这样,我们的需求就全部实现了。
上一篇: c语言标识符有哪三类?
下一篇: C++语言标识符的命名规则是什么?
推荐阅读
-
基于运算符重载的那些事
-
基于运算符重载的那些事
-
Python实现的矩阵转置与矩阵相乘运算示例
-
基于随机梯度下降的矩阵分解推荐算法(python)
-
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
-
对Tensorflow中的矩阵运算函数详解
-
python人脸识别项目之基础学习(三):矩阵的基本运算 + 张量的阶和形态
-
20.7.17 笔记算数运算符 复合运算符重载 比较运算重载 多态 设计原则 类的单一职责 依赖倒置 组合复用原则 里氏替换 迪米特法则 矩阵转置原理
-
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
-
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例