动态得到类的实例,我们通常通过反射来得到。但有时候,类缺少默认构造方法,我们又不想传参来实例化,这时候怎么办呢?
我们还可以通过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);
}
}
}
分享到:
相关推荐
接下来,创建一个测试类KryoTest,用于测试Kryo的序列化和反序列化功能: ```java package com.nettm.serializable; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io....
Java对象序列化与反序列化是开发中常见的需求,它允许我们将对象的状态转换为字节流,以便存储或在网络上传输。Kryo是一款强大的、高效且易于使用的Java序列化库,特别适合对性能有高要求的场景。在本文中,我们将...
akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...
3. **对象共享**:Kryo支持对象引用的处理,能够在序列化和反序列化过程中保持对象间的引用关系,避免了深拷贝的额外开销。 4. **序列化配置**:Kryo提供了丰富的配置选项,如注册特定的序列化策略,控制序列化深度...
tomcat kryo序列化,msm-memcached-session-manager-tc7-1.8.2
对于java原生序列化,我们使用了ObjectOutputStream和ObjectInputStream来实现序列化和反序列化,而对于Kryo序列化,我们使用了Kryo序列化器来实现序列化和反序列化。 6. 序列化的应用:序列化有很多实际应用,例如...
3. **序列化安全性**:Kryo序列化不应用于不信任的数据,因为它可能引发安全问题,如反序列化攻击。 4. **序列化第三方库的对象**:某些第三方库的对象可能不支持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 4.0.0 序列化与反序列化详解》 在软件开发中,数据序列化和反序列化是常见的操作,它能够将对象的状态转换为可存储或传输的形式,以便后续恢复。Kryo是一款高效的序列化库,尤其在Java和Scala等语言中广泛...
kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...
4. 序列化与反序列化:使用Kryo的`writeObject()`和`readObject()`方法进行对象的序列化和反序列化操作。 5. 错误处理:在可能出现错误的地方,如反序列化时,添加适当的异常处理代码,以应对可能出现的序列化异常...
Kryo则是一种高效的Java对象序列化库,能够快速地序列化和反序列化对象,尤其适合于内存有限或者需要高速传输数据的场景。 本主题“netty传输kryo序列化的对象基于socket传输”探讨的是如何结合Netty和Kryo,实现...
Kryo通过注册类和对象实例,能够高效地序列化和反序列化,尤其是在处理大量的小对象时,其性能优势尤为明显。 Kryonet则是在Kryo的基础上构建的网络通信库,它结合了TCP和UDP两种传输协议,为Java应用提供了一种...
除了基础的JSON序列化,Jackson还支持`@JsonSerialize`和`@JsonDeserialize`注解来自定义序列化和反序列化行为。 ```java import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ...
3. **深度复制**:Kryo不仅支持基本的序列化和反序列化,还能实现对象的深拷贝,这对于数据备份、状态恢复等场景非常有用。 4. **预注册类**:预先注册要序列化的类可以进一步提升性能,因为Kryo在运行时无需动态...
2. `kryo-demo.7z`:这是一个示例代码包,可能包含了如何使用Kryo 4.0.0进行序列化和反序列化的代码示例。这些示例可以帮助开发者了解如何初始化Kryo实例,注册类,以及如何序列化和反序列化对象。 在实际应用中,...
Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。示例代码:Kryo kryo = new Kryo(); // ... Output output = new Output(new...
Kryo是一个针对Java的高性能对象图序列化框架,由Esoteric Software开发,其特性包括快速、高效以及自动处理,使得在内存序列化和反序列化过程中能实现卓越的性能。 **Kryo的核心特性** 1. **速度与效率**:Kryo...