当前位置: 首页 > 工具软件 > JID > 使用案例 >

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

申屠无尘
2023-12-01

publicstaticclassUserFactoryextendsAppJidFactory {

finalpublicstaticUserFactory fac =newUserFactory();

publicUserFactory() {

super("User", JidFactories.STRING_JID_TYPE, JidFactories.INTEGER_JID_TYPE);

}

protectedUser instantiateActor()throwsException {

returnnewUser();

}

}

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

接下来就是测试程序:

publicstaticvoidmain(String[] args)throwsException {

JAFactory factory = newJAFactory(){{(newJidFactories()).initialize(this);}};

factory.registerActorFactory(UserFactory.fac);

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

longct = System.currentTimeMillis();

rootJid.setValue("User");

User user = (User)rootJid.getValue();

user.setName("Winter Lau");

user.setAge(98);

intslen = rootJid.getSerializedLength();

byte[] sdatas =newbyte[slen];

rootJid.save(sdatas, 0);

rootJid.load(sdatas, 0, slen);

User user1 = (User)rootJid.getValue();

System.out.printf("%dms->%s:%d\n", (System.currentTimeMillis()-ct), user1.getName(), user1.getAge());

}

程序讲解:

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

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

3. 构造 RootJid,这也是必须的一步(第6行)

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

5. 对 User 对象实例进行值设置

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

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

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

这里需要很注意的是 UserFactory 中构造函数的参数顺序,***个参数是类型名称,接下来的每个参数是对应每个属性的类型,这个必须严格对应 User 类中的 _iGet(xx) 中 xx 的值。

据说 JID 的序列化的性能是极高的,这方面我还没进行测试。需要注意的是这个序列化的结果和 Java 本身的序列化是不兼容的。

完整的代码以及列表的序列化请看:

 类似资料: