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

2023-10-29 13:59

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

41528d3028836879cd698677c3999917.gif使用jid来进行java对象的高性能序列化

使用 JID 来进行Java对象的高性能序列化 今天我试验了下使用 JID 进行 Java 对象的序列化过程,现将这个过程与大家分享,至于 在何种场景下使用大家自己发挥。首先 JID 依赖于 JActor 和 SLF4J ,你下载的 JID 压 缩包中就包含这二者的 jar 文件。 JID 是一个用来反序列化、更新和重新序列化 Map 对象,在 i5 2.53GHz 处理器的机器上,完成 10000 条目的操作仅需 4 毫秒。序列化和重新序列化的时间很大程度上依赖于表条目的大小和复杂度,增量式 的序列化和反序列化用于达到高性能。 今天我试验了下使用 JID 进行 Java 对象的序列化过程,现将这个过程与大家分享,至于在何种场景下 使用大家自己发挥。 首先 JID 依赖于 JActor 和 SLF4J ,你下载的 JID 压缩包中就包含这二者的 jar 文件。 大家先不需要关心代码中牵扯的一些类是作何用途的,先把例子跑起来! 我们这里假设要对一个 User 对象进行序列化,User 对象如下: 1. /** 2. * 序列化对象 3. * @author Winter Lau 4. */ 5. public static class User extends AppJid { 6. private StringJid getNameJid() throws Exception { 7. return (StringJid) _iGet(0); 8. } 9. 10. private IntegerJid getAgeJid() throws Exception { 11. return (IntegerJid) _iGet(1); 12. } 13. 14. public String getName() throws Exception { 15. return getNameJid().getValue(); 16. } 17. 18. public void setName(String name) throws Exception { 19. getNameJid().setValue(name); 20. } 21. 22. public int getAge() throws Exception { 23. return getAgeJid().getValue(); 24. } 25. 26. public void setAge(int age) throws Exception { 27. getAgeJid().setValue(age); 28. } 29.} 然后每个要做序列化的对象都需要有个对应的工厂类,这里是 UserFactory: 1. public static class UserFactory extends AppJidFactory { 2. final public static UserFactory fac = new UserFactory(); 3. 4. public UserFactory() { 5. super(“User“, JidFactories.STRING_JID_TYPE, JidFactories.INTEG ER_JID_TYPE); 6. } 7. 8. protected User instantiateActor() throws Exception { 9. return new User(); 10. } 11.} 其中特别注意 UserFactory 构造函数里的 “User“ 这个参数,下面需要用到。 接下来就是测试程序: 1. public static void main(String[] args) throws Exception { 2. 3. JAFactory factory = new JAFactory(){{(new JidFactories()).initiali ze(this);}}; 4. factory.registerActorFactory(UserFactory.fac); 5. 6. RootJid rootJid = (RootJid) factory.newActor(JidFactories.ROOT_JID _TYPE); 7. long ct = System.currentTimeMillis(); 8. rootJid.setValue(“User“); 9. 10. User user = (User)rootJid.getValue(); 11. user.setName(“Winter Lau“); 12. user.setAge(98); 13. 14. int slen = rootJid.getSerializedLength(); 15. 16. byte[] sdatas = new byte[slen]; 17. rootJid.save(sdatas, 0); 18. 19. rootJid.load(sdatas, 0, slen); 20. User user1 = (User)rootJid.getValue(); 21. 22. System.out.printf(“%dms->%s:%d\n“, (System.currentTimeMillis()- ct), user1.getName(), user1.getAge()); 23. 24.} 程序讲解: 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(x

这篇关于java jid_使用jid来进行java对象的高性能序列化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java中Integer128陷阱

《Java中Integer128陷阱》本文主要介绍了Java中Integer与int的区别及装箱拆箱机制,重点指出-128至127范围内的Integer值会复用缓存对象,导致==比较结果为true,下... 目录一、Integer和int的联系1.1 Integer和int的区别1.2 Integer和in