java 第三方序列化,我可以(轻松地)使用第三方库来处理Java RMI的序列化吗?

我非常喜欢通过Java的RMI调用远程方法的简单性,但是其序列化格式的冗长性是一个主要的嗡嗡声(是的,我已经进行了基准测试,谢谢).在设计RPC(松散地说)组件时,Sun的建筑师似乎做了明显的正确选择,但是在实现序列化时却出现了一次史诗般的失败.

相反,似乎Thrift,Avro,Kryo(尤其是),协议缓冲区(不是很多)等的架构师在设计其序列化格式时通常做了明显的正确选择,但要么都不提供RPC机制,要么提供是不必要的卷积(或不成熟),或者是比调用远程方法更适合数据传输的方法(对于许多用途来说完全可以,但不是我想要的).

因此,一个显而易见的问题是:如何使用RMI的方法调用友好性,但将上述库之一用于有线协议?无需大量工作就可以吗?我是否对上述库之一进行了过于严格的评估(请注意,总的来说,我非常不喜欢代码生成;我不喜欢某些不必要的注释,而XML配置则要多得多;任何形式的“ beans”都使我感到畏缩-我不喜欢不需要重量;理想情况下,我希望只为远程对象实现一个接口,就像使用RMI).

解决方法:

从前,我确实有相同的要求.我更改了rmi方法的参数并将类型返回为byte [].

我使用首选的序列化程序将对象序列化为字节数组,然后将其称为修改后的rmi方法.

好吧,正如您提到的Java序列化过于冗长,因此5年前,我确实实现了空间高效的序列化算法.如果要发送非常复杂的对象图,它将节省太多空间.最近,我不得不将此序列化实现移植到GWT,因为在Dev模式下GWT的序列化非常慢.

举个例子;

rmi方法

public void saveEmployee(Employee emp){

//business code

}

您应该像下面这样更改它,

public void saveEmployee(byte[] empByte) {

YourPreferredSerializer serialier = YourPreferredSerializerFactory.creteSerializer();

Employee emp = (Employee) serializer.deSerialize(empByte);

//business code

}

编辑:

您应该检查MessagePack.看起来很有希望.

标签:serialization,rpc,rmi,java

来源: https://codeday.me/bug/20191023/1913770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值