`
vyloy
  • 浏览: 80390 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

让kryo支持反序列化没有无参构造方法的类

阅读更多
动态得到类的实例,我们通常通过反射来得到。但有时候,类缺少默认构造方法,我们又不想传参来实例化,这时候怎么办呢?
我们还可以通过sun.reflect.ReflectionFactory来完成,例子如下:

import java.lang.reflect.Constructor;
import java.util.concurrent.ConcurrentHashMap;

import sun.reflect.ReflectionFactory;

import com.esotericsoftware.kryo.Kryo;

public class Kryox extends Kryo {

	private final ReflectionFactory REFLECTION_FACTORY = ReflectionFactory
			.getReflectionFactory();

	private final ConcurrentHashMap<Class<?>, Constructor<?>> _constructors = new ConcurrentHashMap<Class<?>, Constructor<?>>();

	@Override
	public <T> T newInstance(Class<T> type) {
		try {
			return super.newInstance(type);
		} catch (Exception e) {
			return (T) newInstanceFromReflectionFactory(type);
		}
	}

	private Object newInstanceFrom(Constructor<?> constructor) {
		try {
			return constructor.newInstance();
		} catch (final Exception e) {
			throw new RuntimeException(e);
		}
	}

	@SuppressWarnings("unchecked")
	public <T> T newInstanceFromReflectionFactory(Class<T> type) {
		Constructor<?> constructor = _constructors.get(type);
		if (constructor == null) {
			constructor = newConstructorForSerialization(type);
			Constructor<?> saved = _constructors.putIfAbsent(type, constructor);
			if(saved!=null)
				constructor=saved;
		}
		return (T) newInstanceFrom(constructor);
	}

	private <T> Constructor<?> newConstructorForSerialization(
			Class<T> type) {
		try {
			Constructor<?> constructor = REFLECTION_FACTORY
					.newConstructorForSerialization(type,
							Object.class.getDeclaredConstructor());
			constructor.setAccessible(true);
			return constructor;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}
分享到:
评论

相关推荐

    Kryo序列化及反序列化用法示例

    接下来,创建一个测试类KryoTest,用于测试Kryo的序列化和反序列化功能: ```java package com.nettm.serializable; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io....

    java高效对象序列化反序列化工具kryo-2.21

    Java对象序列化与反序列化是开发中常见的需求,它允许我们将对象的状态转换为字节流,以便存储或在网络上传输。Kryo是一款强大的、高效且易于使用的Java序列化库,特别适合对性能有高要求的场景。在本文中,我们将...

    akka-kryo-serialization, 基于Kryo的Akka序列化.zip

    akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...

    kryo序列化jar包集合

    3. **对象共享**:Kryo支持对象引用的处理,能够在序列化和反序列化过程中保持对象间的引用关系,避免了深拷贝的额外开销。 4. **序列化配置**:Kryo提供了丰富的配置选项,如注册特定的序列化策略,控制序列化深度...

    tomcat-session序列化(tomcat-kryo序列化)

    tomcat kryo序列化,msm-memcached-session-manager-tc7-1.8.2

    java原生序列化和Kryo序列化性能实例对比分析

    对于java原生序列化,我们使用了ObjectOutputStream和ObjectInputStream来实现序列化和反序列化,而对于Kryo序列化,我们使用了Kryo序列化器来实现序列化和反序列化。 6. 序列化的应用:序列化有很多实际应用,例如...

    kryo序列化

    3. **序列化安全性**:Kryo序列化不应用于不信任的数据,因为它可能引发安全问题,如反序列化攻击。 4. **序列化第三方库的对象**:某些第三方库的对象可能不支持Kryo序列化,或者序列化后可能无法正确恢复。在这种...

    memcached session manager 1.9.6 适用于 tomcat 8 各版本 支持kryo等多种序列化方式

    8. **msm-flexjson-3.3.jar**: FlexJSON库,用于JSON序列化和反序列化。 9. **msm-kryo-serializers-0.37.jar**: 针对Kryo的额外序列化器,扩展了其序列化功能。 10. **msm-javolution-serializer-1.9.6.jar**: 与...

    kryo-demo,kryo4.0.0-demo

    《Kryo 4.0.0 序列化与反序列化详解》 在软件开发中,数据序列化和反序列化是常见的操作,它能够将对象的状态转换为可存储或传输的形式,以便后续恢复。Kryo是一款高效的序列化库,尤其在Java和Scala等语言中广泛...

    kryo实例,对java object的序列化和反序列化

    kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...

    kryo4.0.0依赖包

    4. 序列化与反序列化:使用Kryo的`writeObject()`和`readObject()`方法进行对象的序列化和反序列化操作。 5. 错误处理:在可能出现错误的地方,如反序列化时,添加适当的异常处理代码,以应对可能出现的序列化异常...

    netty传输kryo序列化的对象基于socket传输

    Kryo则是一种高效的Java对象序列化库,能够快速地序列化和反序列化对象,尤其适合于内存有限或者需要高速传输数据的场景。 本主题“netty传输kryo序列化的对象基于socket传输”探讨的是如何结合Netty和Kryo,实现...

    基于Kryo序列化机制的RPC协议——Kryonet的应用与研究

    Kryo通过注册类和对象实例,能够高效地序列化和反序列化,尤其是在处理大量的小对象时,其性能优势尤为明显。 Kryonet则是在Kryo的基础上构建的网络通信库,它结合了TCP和UDP两种传输协议,为Java应用提供了一种...

    java 常用序列化和反序列化框架使用demo

    除了基础的JSON序列化,Jackson还支持`@JsonSerialize`和`@JsonDeserialize`注解来自定义序列化和反序列化行为。 ```java import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ...

    kryo-3.0.3-all.zip

    3. **深度复制**:Kryo不仅支持基本的序列化和反序列化,还能实现对象的深拷贝,这对于数据备份、状态恢复等场景非常有用。 4. **预注册类**:预先注册要序列化的类可以进一步提升性能,因为Kryo在运行时无需动态...

    kryo4.0.0最新依赖包及其demo

    2. `kryo-demo.7z`:这是一个示例代码包,可能包含了如何使用Kryo 4.0.0进行序列化和反序列化的代码示例。这些示例可以帮助开发者了解如何初始化Kryo实例,注册类,以及如何序列化和反序列化对象。 在实际应用中,...

    Java对象序列化框架Kryo.zip

    Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。示例代码:Kryo kryo = new Kryo(); // ... Output output = new Output(new...

    KryoJava序列化和克隆框架具有快速高效自动的特点

    Kryo是一个针对Java的高性能对象图序列化框架,由Esoteric Software开发,其特性包括快速、高效以及自动处理,使得在内存序列化和反序列化过程中能实现卓越的性能。 **Kryo的核心特性** 1. **速度与效率**:Kryo...

Global site tag (gtag.js) - Google Analytics