Java 序列化为字符串

Java serialization to string

我有以下静态类型声明 Object:

Integer typeId;
//Obtaining typeId
Object containerObject = ContainerObjectFactory.create(typeId);

工厂可以生产不同类型的 container objects,例如DateIntegerBigDecimal 等等。

现在,在创建 containerObejct 之后,我需要将其序列化为 String 类型的对象,并使用休眠将其存储到数据库中。我不打算提供对象关系映射,因为它与问题没有直接关系。

好吧,我想做的是根据它的运行时类型序列化 containerObject 并稍后使用它被序列化的类型反序列化它。有可能吗?我可以为此使用 xml-序列化吗?

有多种方式,但需要自定义序列化方案,例如:

D|25.01.2015
I|12345
BD|123456.123452436

其中字符串的第一部分表示类型,第二部分表示数据。您甚至可以为此使用一些二进制序列化方案。

有很多选择,你的问题很宽泛。你可以:

您提到的一个关键特性是对象类型需要嵌入到序列化数据中。本机 Java 序列化将类型嵌入到数据中,因此这是一个很好的选择。然而,这是一把双刃剑,因为这会使数据变得脆弱 - 如果在将来的某个时候您更改了完全限定的 class 名称,那么您将无法再反序列化该对象。

另一方面,Gson 不嵌入类型信息,因此您必须同时存储 JSON 和对象类型才能反序列化对象。

XML 和 JSON 的优点是它们是文本格式,因此即使不反序列化,您也可以用肉眼来查看它是什么。然而,Base64 编码 Java 序列化是一团难以理解的字符。