千家信息网

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

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,如何使用JID来进行Java对象的高性能序列化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JID 是一个用来反序列化、
千家信息网最后更新 2025年02月02日如何使用JID来进行Java对象的高性能序列化

如何使用JID来进行Java对象的高性能序列化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

今天我试验了下使用 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 本身的序列化是不兼容的。

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

https://github.com/oschina/cache-framework/tree/master/src/net/oschina/demo

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

序列 对象 参数 类型 就是 过程 高性能 接下来 代码 函数 属性 数据 条目 程序 这是 帮助 测试 复杂 很大 清楚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 IP6访问群晖服务器 江西省网络安全技能大赛怎么报名 仙桃数据谷软件开发 2021软件开发工具下载 网络安全教育幼儿园小班主题班会 查看数据库审计策略 网络安全电子商务领域 java的登录连接数据库 大一专科计算机网络技术基础试题 怀旧服死亡竞技场最新服务器 网络数据库盗取Cookie 网易最强斗罗大陆服务器 计算机网络技术的特点不包括 达梦数据库没有对象插入权限 上海妈妈家网络技术有限公司 数据库读取速度与硬件的关系 2g网络技术是什么 教务系统应用软件开发服务 博山客户办公crm软件开发公司 网络安全暨舆情试卷 SRS软件开发是什么意思 数据库怎么创建数据库 招投标数据库 软件开发学费分期上征信吗 关于网络安全内容的图片五年级 将文件上传到数据库 国家推动网络安全 建设 天津市服务器供应商 服务器的console口坏了 常熟营销网络技术服务费
0