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

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

flask库中sessions.py的使用小结

《flask库中sessions.py的使用小结》在Flask中Session是一种用于在不同请求之间存储用户数据的机制,Session默认是基于客户端Cookie的,但数据会经过加密签名,防止篡改,... 目录1. Flask Session 的基本使用(1) 启用 Session(2) 存储和读取 Se

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取