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集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController