关于 kryo 序列化的持久化问题!

发布于 2021-11-21 19:34:39 字数 1904 浏览 813 评论 1

使用 kryo 进行序列化的速度的确很快!但是在序列化之后的持久化问题上有一些问题发生。

序列化之后的对象保存在redis上,如果redis存在旧的序列化的数据,那么在tomcat启动的时候,运行项目,就会出现这种错误。

要想正常启动运行就必须清除原来的redis缓存,这自然是不行的。

从错误可以看出是class ID不一致的问题。因为没有使用 

kryo.register(someclassB.class, 111);
这种方式来 register class!不想每次新加一个类都做这种操作。而且还有很多List,Map之类的register问题。

下面是序列化工具类代码:

package net.oschina.j2cache.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import net.sf.ehcache.CacheException;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;

public class SerializationUtils {
	public final static Kryo kryo = new Kryo();
	static {
		kryo.setRegistrationRequired(false);
		kryo.setMaxDepth(20);
	}

	public static byte[] serialize(Object obj) {
		ByteArrayOutputStream out = null;
		Output output = null;
		try {
			out = new ByteArrayOutputStream();
			output = new Output(out, 1024);
			kryo.writeClassAndObject(output, obj);
			return output.toBytes();
		} catch (Exception e) {
			throw new CacheException(e);
		} finally {
			if (null != out) {
				try {
					out.close();
					out = null;
				} catch (IOException e) {
				}
			}
			if (null != output) {
				output.close();
				output = null;
			}
		}
	}

	public static Object deserialize(byte[] bytes) {
		Input input = null;
		try {
			input = new Input(bytes, 0, 1024);
			return kryo.readClassAndObject(input);
		} catch (Exception e) {
			throw new CacheException(e);
		} finally {
			if (null != input) {
				input.close();
				input = null;
			}
		}
	}

}



不知道有没有比较好的方法,又不用使用register的方式,来解决这个问题呢!


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沙与沫 2021-11-26 03:49:37

顶下,这个 register 的侵入性太强了,Java 原生的可以通过 serialVersionID 来解决,难道 kryo 不行?

http://stackoverflow.com/questions/12277193/automatic-class-registration-in-kryo

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文