java 高性能序列化,使用JID来进行Java对象的高性能序列化

本文介绍了如何利用JID库进行Java对象的高性能序列化和反序列化。通过示例展示了User对象的序列化过程,包括创建JAFactory、注册序列化类、构造RootJid以及进行序列化和反序列化操作。JID能够实现毫秒级的操作速度,尤其适用于处理大量数据的场景。
摘要由CSDN通过智能技术生成

使用JID来进行Java对象的高性能序列化以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

f6cb5f2a3ae1a8628da3a824d726419d.png

JID 是一个用来反序列化 更新和重新序列化 Map 对象 在 i GHz 处理器的机器上 完成 条目的操作仅需 毫秒 序列化和重新序列化的时间很大程度上依赖于表条目的大小和复杂度 增量式的序列化和反序列化用于达到高性能

今天我试验了下使用 JID 进行 Java 对象的序列化过程 现将这个过程与大家分享 至于在何种场景下使用大家自己发挥

首先 JID 依赖于 JActor 和 SLF J 你下载的 JID 压缩包中就包含这二者的 jar 文件

大家先不需要关心代码中牵扯的一些类是作何用途的 先把例子跑起来!

我们这里假设要对一个 User 对象进行序列化 User 对象如下

/**

* 序列化对象

* @author Winter Lau

*/

public static class User extends AppJid {

private StringJid getNameJid() throws Exception {

return (StringJid) _iGet( );

}

private IntegerJid getAgeJid() throws Exception {

return (IntegerJid) _iGet( );

}

public String getName() throws Exception {

return getNameJid() getValue();

}

public void setName(String name) throws Exception {

getNameJid() setValue(name);

}

public int getAge() throws Exception {

return getAgeJid() getValue();

}

public void setAge(int age) throws Exception {

getAgeJid() setValue(age);

}

}

然后每个要做序列化的对象都需要有个对应的工厂类 这里是 UserFactory

public static class UserFactory extends AppJidFactory {

final public static UserFactory fac = new UserFactory();

public UserFactory() {

super( User JidFactories STRING_JID_TYPE JidFactories INTEGER_JID_TYPE);

}

protected User instantiateActor() throws Exception {

return new User();

}

}

其中特别注意 UserFactory 构造函数里的 User 这个参数 下面需要用到

接下来就是测试程序

public static void main(String[] args) throws Exception {

JAFactory factory = new JAFactory(){{(new JidFactories()) initialize(this);}};

factory registerActorFactory(UserFactory fac);

RootJid rootJid = (RootJid) factory newActor(JidFactories ROOT_JID_TYPE);

long ct = System currentTimeMillis();

rootJid setValue( User );

User user = (User)rootJid getValue();

user setName( Winter Lau );

user setAge( );

int slen = rootJid getSerializedLength();

byte[] sdatas = new byte[slen];

rootJid save(sdatas );

rootJid load(sdatas slen);

User user = (User)rootJid getValue();

System out printf( %dms >%s:%d\n (System currentTimeMillis() ct) user getName() user getAge());

}

程序讲解

首先需要构造 JAFactory 这是使用 JID 必须的一步(第 行)

然后注册我们需要进行序列化的类(第 行)

构造 RootJid 这也是必须的一步(第 行)

rootJid setValue( User ) 这是设置要进行序列化的对象类型 这个 User 就是我们在 UserFactory 定义的字符串

对 User 对象实例进行值设置

使用 rootJid save 方法进行序列化 就是把对象转称 byte 数组

最后一步是演示从 byte 数据中加载对象并打印对象的属性

这便是一个完整的使用 JID 进行自定义对象的序列化和反序列化的过程 如果你是使用 Java 原生的一些数据类型 就不需要自行创建类对象

这里需要很注意的是 UserFactory 中构造函数的参数顺序 第一个参数是类型名称 接下来的每个参数是对应每个属性的类型 这个必须严格对应 User 类中的 _iGet(xx) 中 xx 的值 lishixinzhi/Article/program/Java/hx/201311/25813

分页:123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值