Java 序列化为字符串
Java serialization to string
我有以下静态类型声明 Object
:
Integer typeId;
//Obtaining typeId
Object containerObject = ContainerObjectFactory.create(typeId);
工厂可以生产不同类型的 container objects
,例如Date
、Integer
、BigDecimal
等等。
现在,在创建 containerObejct
之后,我需要将其序列化为 String
类型的对象,并使用休眠将其存储到数据库中。我不打算提供对象关系映射,因为它与问题没有直接关系。
好吧,我想做的是根据它的运行时类型序列化 containerObject
并稍后使用它被序列化的类型反序列化它。有可能吗?我可以为此使用 xml
-序列化吗?
有多种方式,但需要自定义序列化方案,例如:
D|25.01.2015
I|12345
BD|123456.123452436
其中字符串的第一部分表示类型,第二部分表示数据。您甚至可以为此使用一些二进制序列化方案。
有很多选择,你的问题很宽泛。你可以:
- 使用native Java serialisation, which is binary, and then Base64编码
- 使用 XML 序列化库,例如 XStream
- 使用JSON序列化库,例如Gson
您提到的一个关键特性是对象类型需要嵌入到序列化数据中。本机 Java 序列化将类型嵌入到数据中,因此这是一个很好的选择。然而,这是一把双刃剑,因为这会使数据变得脆弱 - 如果在将来的某个时候您更改了完全限定的 class 名称,那么您将无法再反序列化该对象。
另一方面,Gson 不嵌入类型信息,因此您必须同时存储 JSON 和对象类型才能反序列化对象。
XML 和 JSON 的优点是它们是文本格式,因此即使不反序列化,您也可以用肉眼来查看它是什么。然而,Base64 编码 Java 序列化是一团难以理解的字符。
我有以下静态类型声明 Object
:
Integer typeId;
//Obtaining typeId
Object containerObject = ContainerObjectFactory.create(typeId);
工厂可以生产不同类型的 container objects
,例如Date
、Integer
、BigDecimal
等等。
现在,在创建 containerObejct
之后,我需要将其序列化为 String
类型的对象,并使用休眠将其存储到数据库中。我不打算提供对象关系映射,因为它与问题没有直接关系。
好吧,我想做的是根据它的运行时类型序列化 containerObject
并稍后使用它被序列化的类型反序列化它。有可能吗?我可以为此使用 xml
-序列化吗?
有多种方式,但需要自定义序列化方案,例如:
D|25.01.2015
I|12345
BD|123456.123452436
其中字符串的第一部分表示类型,第二部分表示数据。您甚至可以为此使用一些二进制序列化方案。
有很多选择,你的问题很宽泛。你可以:
- 使用native Java serialisation, which is binary, and then Base64编码
- 使用 XML 序列化库,例如 XStream
- 使用JSON序列化库,例如Gson
您提到的一个关键特性是对象类型需要嵌入到序列化数据中。本机 Java 序列化将类型嵌入到数据中,因此这是一个很好的选择。然而,这是一把双刃剑,因为这会使数据变得脆弱 - 如果在将来的某个时候您更改了完全限定的 class 名称,那么您将无法再反序列化该对象。
另一方面,Gson 不嵌入类型信息,因此您必须同时存储 JSON 和对象类型才能反序列化对象。
XML 和 JSON 的优点是它们是文本格式,因此即使不反序列化,您也可以用肉眼来查看它是什么。然而,Base64 编码 Java 序列化是一团难以理解的字符。