Crisis-rpc之三传输对象与序列化
来源:互联网 发布:省市区县json 编辑:程序博客网 时间:2024/05/21 22:51
Crisis-rpc项目链接:https://github.com/JeremieAstray/crisis-rpc
这一篇博客讲的是Crisis-rpc如何定义rpc传输的对象,参数定义,序列化的方式等。
一、传输对象的定义
传输对象分为二个RpcInvocation和RpcResult。
RpcInvocation包含了服务的id、服务名、服务要调用的类、调用的方法、返回参数类型、调用的类型和调用的参数。
RpcResult包含了服务的id、服务名、调用状态、返回的对象或者Exception。
代码如下:
public class RpcInvocation implements Serializable { private String clientId; private String destClazz; private String method; private Class[] paramsType; private Object[] params; private Class returnType; private String serverName;}
public class RpcResult implements Serializable { private String clientId; private Status status; private Object returnPara; private Exception exception; private String serverName;}
二、序列化工具
Crisis-rpc使用Java的序列化方式对对象进行序列化,这里拆成两种,将对象序列化为字节数组和字符串以及其反序列化。
public class SerializeTool { private static final Logger logger = LoggerFactory.getLogger(SerializeTool.class); //对象序列化为字符串 public static String objectToString(Object object) { ByteArrayOutputStream byteArrayOutputStream = null; ObjectOutputStream objectOutputStream = null; try { byteArrayOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); objectOutputStream.flush(); return byteArrayOutputStream.toString("ISO-8859-1"); } catch (IOException e) { logger.error("objectToString error", e); } finally { try { if (objectOutputStream != null) objectOutputStream.close(); if (byteArrayOutputStream != null) byteArrayOutputStream.close(); } catch (IOException e) { logger.error("close stream error", e); } } return null; } //字符串反序列化为对象 public static Object stringToObject(String string) { ByteArrayInputStream byteArrayInputStream = null; ObjectInputStream objectInputStream = null; try { byte[] objectBytes = string.getBytes("ISO-8859-1"); byteArrayInputStream = new ByteArrayInputStream(objectBytes); objectInputStream = new ObjectInputStream(byteArrayInputStream); return objectInputStream.readObject(); } catch (IOException | ClassNotFoundException e) { logger.error("stringToObject error", e); } finally { try { if (objectInputStream != null) objectInputStream.close(); if (byteArrayInputStream != null) byteArrayInputStream.close(); } catch (IOException e) { logger.error("close stream error", e); } } return null; } //字节数组反序列化为对象 public static Object byteArrayToObject(byte[] byteArray) throws EOFException { ByteArrayInputStream byteArrayInputStream = null; ObjectInputStream objectInputStream = null; try { byteArrayInputStream = new ByteArrayInputStream(byteArray); objectInputStream = new ObjectInputStream(byteArrayInputStream); return objectInputStream.readObject(); } catch (EOFException e) { throw e; } catch (IOException | ClassNotFoundException e) { logger.error("byteArrayToObject error", e); } finally { try { if (objectInputStream != null) objectInputStream.close(); if (byteArrayInputStream != null) byteArrayInputStream.close(); } catch (IOException e) { logger.error("close stream error", e); } } return null; } //对象序列化为字节数组 public static byte[] objectToByteArray(Object object) { ByteArrayOutputStream byteArrayOutputStream = null; ObjectOutputStream objectOutputStream = null; try { byteArrayOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); objectOutputStream.flush(); return byteArrayOutputStream.toByteArray(); } catch (IOException e) { logger.error("objectToByteArray error", e); } finally { try { if (objectOutputStream != null) objectOutputStream.close(); if (byteArrayOutputStream != null) byteArrayOutputStream.close(); } catch (IOException e) { logger.error("close stream error", e); } } return null; }}
总结
这一部分我自己定义了rpc的传输对象和序列化方式。
其实,这里写的序列化方式不是十分的完善,序列化的方式过于暴力,而且这样子序列化传输数据会有安全问题(局域网内部的话其实可以忽略),因此后面也需要继续对其进行优化。
Crisis-rpc项目链接:https://github.com/JeremieAstray/crisis-rpc
0 0
- Crisis-rpc之三传输对象与序列化
- Crisis-rpc之四线程同步与rpc连接实现
- Crisis-rpc之二spring配置初始化与获取
- rpc 之序列化
- 序列化对象传输
- Hessian RPC示例和基于Http请求的Hessian序列化对象传输
- RPC框架-对象序列化
- avro序列化与RPC
- intent传输对象序列化-parcelable与Serializable
- Socket传输序列化对象
- Java 网络编程 之 传输对象 Serialization 序列化
- java序列化(三)之FastJson实现复杂对象序列化与反序列化
- 使用mina2对象传输数据是,传输的数据序列化错误与解决方案
- 序列化与网络传输
- 网络传输之序列化
- 序列化与反序列化---RPC
- Java Socket实战之三 传输对象
- Java Socket实战之三 传输对象
- c++实验三
- Android硬件编码-音视频编码以及音视频混合
- Linux SSH管理用户登录
- Android App性能优化
- 基于svn ls 实现的SVN目录自动补全
- Crisis-rpc之三传输对象与序列化
- 使用VMware虚拟机安装kali至U盘
- centos 6.7 yum笔记
- JDBC中的预编译
- swift带cocoapods项目编译 Run custom script会卡很长时间的解决办法
- 获取手机的一些信息
- 原生js到底是指什么?
- Android加载大图——BitmapRegionDecoder
- Android样式设置总结