2016-04-08 25 views
0

对象是否可以通过任何与该对象被序列化为JSON或XML的能力相关的方式来实现Serializable接口? Java序列化使用的文本格式是否有名称? 如果不是,我们是否应该不使用“序列化”一词来描述将对象导出为JSON或XML,以避免混淆? 在AO中,这三种序列化方法的典型用途是什么?Java序列化,JSON,JAXB之间的区别?

我知道JAXB通常用于将XML转换为Java,而不是其他方式,但我听说反过来也是可能的。

+1

_是否存在Java序列化使用的文本格式的名称?_Java不会序列化为文本,所以不,它是无名的。 – Mordechai

回答

3

序列化只是指将对象从特定于进程的内存中格式导出为进程间格式,可以由不同的进程或应用程序读取和理解。它可能是文本,也可能是二进制文件,没关系。这是所有的序列化。反向过程(将串行化进程间格式读取并解析为内存中,进程内格式)称为反序列化

从这个意义上说,将对象序列化到ObjectStream中与将序列化到JSON或XML的序列化一样多。 ObjectStream序列化非常难以被非java(包括人类)理解/解析,它不是“人类可读的”,但是它被使用是因为它可以在没有任何特殊标记的情况下在几乎任何对象上完成。

另一方面,JSON/XML需要额外的工作来告诉解析器如何将它们映射到JSON/XML或从JSON/XML映射它们,但是非常便携 - 几乎每种语言都可以理解JSON/XML,包括人类 - 它是“人类可读的”。

+0

感谢您的帮助! – wcr4

0

Java对象序列化的一个目的是能够将它们写入到一个(二进制)文件中,一些Java程序可以从该文件中读取它们,并将相同的对象存入其内存。这个用法是通常仅限于Java应用程序的写入和读取,尽管一些非Java应用程序可能会写入来理解二进制格式。

Java对象的另一个经常使用的序列化是将它们写入一个文本(或二进制)文件,其中一些(注意缺少:Java)程序可以读取和重建等价于POJO的对象或数据结构。当然,这也是相反的。 (我添加了“二进制”,因为有一些二进制格式没有被Java定义为独立于体系结构的格式,例如ASN.1。)

而且,是的,JAXB可以工作,但是有一些困难如果XML相当“过时”,即远离JAXB可以轻松处理或处理的地方。但是如果你可以设计XML模式或者Java类,它就可以很好地工作。 JAXB是JDK的一部分,如果您需要从Java转到X或返回,您可能更喜欢将其用于其他序列化。 XML还有其他的languange绑定。

+0

[This](http://www.javaworld.com/article/2072752/the-java-serialization-algorithm-revealed.html)表示输出格式为十六进制,你能评论吗? – wcr4

+0

“hex”在其他地方不会出现,除了您的评论。它通常意味着“数据由0-9表示,A-F,每个字节两个”。我也没有在这里看到。 – laune

+0

也许你没有在我的评论中发现链接。在链接页面的标题“对象的序列化格式”下,该文件以十六进制显示;但也许它通常以二进制形式输出,并且为了空间的缘故,文章作者有意将其转换为十六进制。 – wcr4