java将对象或对象集合序列化成string

时间:2025-03-27 18:15:15

                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才行,否者的话会编译不通过。

 

 

 

相关文章