java jid_Java对象中如何使用JID来进行高性能序列_Java程序_Java对象_课课家

2023-10-29 13:59

本文主要是介绍java jid_Java对象中如何使用JID来进行高性能序列_Java程序_Java对象_课课家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

c8b8ee19af7b5655b20fc70d32c6bc9b.png

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

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

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

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

/**

* 序列化对象

* @author Winter Lau

*/

public static class User extends appJid {

private StringJid getNameJid() throws Exception {

return (StringJid) _iGet(0);

}

private IntegerJid getAgeJid() throws Exception {

return (IntegerJid) _iGet(1);

}

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(98);

int slen = rootJid.getSerializedLength();

byte[] sdatas = new byte[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 本身的序列化是不兼容的。

这篇关于java jid_Java对象中如何使用JID来进行高性能序列_Java程序_Java对象_课课家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301120

相关文章

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过