java将对象或对象集合序列化成string
一、介绍
在日常java开发中,可能需要将java中的对象转化成String类型进行存储在数据库或者Redis中。自己可能很难完成这个转化的过程,所以使用以下代码工具类进行快速转化。
二、框架介绍
Kryo是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的API。无论文件、数据库或网络数据Kryo都可以随时完成序列化。Kryo还可以执行自动深拷贝(克隆)、浅拷贝(克隆)。这是对象到对象的直接拷贝,非对象->字节->对象的拷贝。
三、代码介绍
1、pom文件
// 各位根据自己需求选择不同version
<dependency>
<groupId></groupId>
<artifactId>kryo-shaded</artifactId>
<version>4.0.1</version>
</dependency>
2、代码
import ;
import ;
import ;
import ;
import ;
import ;
import .Base64;
import ;
import ;
import ;
import ;
import ;
public class SerializeUtil {
// 将对象序列化成string
public static <T extends Serializable> String serializeObject(T obj) {
Kryo kryo = new Kryo();
(false);
((), new JavaSerializer());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Output output = new Output(baos);
(output, obj);
();
();
byte[] b = ();
try {
();
();
} catch (IOException e) {
();
}
return new String(new Base64().encode(b));
}
// 将string反序列化成对象
@SuppressWarnings("unchecked")
public static <T extends Serializable> T deserializeObject(String obj, Class<T> clazz) {
Kryo kryo = new Kryo();
(false);
(clazz, new JavaSerializer());
ByteArrayInputStream bais = new ByteArrayInputStream(new Base64().decode(obj));
Input input = new Input(bais);
return (T) (input);
}
// 将对象List集合序列化成string
public static <T extends Serializable> String serializeList(List<T> obj,
Class<T> clazz) {
Kryo kryo = new Kryo();
(false);
(true);
CollectionSerializer serializer = new CollectionSerializer();
(clazz, new JavaSerializer());
(false);
(clazz, new JavaSerializer());
(, serializer);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Output output = new Output(baos);
(output, obj);
();
();
byte[] b = ();
try {
();
();
} catch (IOException e) {
();
}
return new String(new Base64().encode(b));
}
// 将string反序列化成对象List集合
@SuppressWarnings("unchecked")
public static <T extends Serializable> List<T> deserializeList(String obj,
Class<T> clazz) {
Kryo kryo = new Kryo();
(false);
(true);
CollectionSerializer serializer = new CollectionSerializer();
(clazz, new JavaSerializer());
(false);
(clazz, new JavaSerializer());
(, serializer);
ByteArrayInputStream bais = new ByteArrayInputStream(
new Base64().decode(obj));
Input input = new Input(bais);
return (List<T>) (input, , serializer);
}
}
3、使用
// QuestionDto 自定义的类
// 序列化
String value = (listQuestionDto, );
// 反序列化
List<QuestionDto> = (value, );
4、注意事项:
在步骤3中,需要序列化的对象必须是实现序列化接口的也就是说实体类需要 implements Serializable才行,否者的话会编译不通过。