首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java序列化为字符串

Java序列化为字符串
EN

Stack Overflow用户
提问于 2015-04-11 07:35:53
回答 2查看 3.7K关注 0票数 0

我有下面的静态类型Object声明

代码语言:javascript
复制
Integer typeId;
//Obtaining typeId
Object containerObject = ContainerObjectFactory.create(typeId);

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

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

好的,我想做的是根据containerObject的运行时类型序列化它,然后用它被序列化的类型对它进行去功能化。有可能吗?我能用xml-serialization吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-11 08:56:30

有很多种选择,你的问题相当广泛。你可以:

  • 使用原生Java序列化,它是二进制的,然后Base64对它进行编码
  • 使用XML序列化库,如XStream
  • 使用JSON序列化库,如葛森

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

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

XML和JSON的优点在于它们是文本格式,因此即使不对其进行反序列化,您也可以使用人工眼睛查看它是什么。然而,Base64编码的Java序列化是一堆难以理解的字符。

票数 3
EN

Stack Overflow用户

发布于 2015-04-11 08:37:37

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

代码语言:javascript
复制
D|25.01.2015
I|12345
BD|123456.123452436

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29575363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档