1.使用 Kryo 需要添加的 Maven 依赖
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>com.esotericsoftware.kryo</groupId>
<artifactId>kryo5</artifactId>
<version>5.3.0</version>
</dependency>
2.工具类KryoSerializerUtil.java
public class KryoSerializerUtil {
public static <T> void serialize(T obj, String filepath) throws FileNotFoundException {
Kryo kryo = new Kryo();
kryo.setReferences(true);
kryo.setRegistrationRequired(false);
try {
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(filepath));
Output output = new Output(bufferedOutputStream);
kryo.writeObject(output, obj);
output.close();
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static <T> T deserialize(Class<T> clazz, String filepath) {
try {
Kryo kryo = new Kryo();
kryo.setReferences(true);
kryo.setRegistrationRequired(false);
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filepath));
Input input = new Input(bufferedInputStream);
T t = kryo.readObject(input, clazz);
input.close();
return t;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
3.实例演示
public class KryoSerializerUtilTest {
public static void main(String[] args) throws FileNotFoundException {
String filepath="D:\\file\\file.bin";
Car car = new Car();
car.setName("宝马7系");
car.setBrand("宝马");
car.setPrice(new BigDecimal(1000000.00));
KryoSerializerUtil.serialize(car,filepath);
Car deserialize = KryoSerializerUtil.deserialize(car.getClass(), filepath);
System.out.println(deserialize.toString());
}
}
@Data
@ToString
class Car implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private BigDecimal price;
private String brand;
}
4.演示结果
