2016-04-08 28 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