2012-08-11 200 views
0

我有一些讀寫Java對象(使用序列化)以及一些對象的代碼。可以將序列化的java對象轉換爲文本嗎?

我想將它們轉換爲文本,所以來自其他平臺的其他人可以將這些對象與我的代碼(僅作爲包提供)一起使用。

我可以爲對象編寫一個完整的文本格式解析器。然而,這是一個截止日期,我希望以其他方式做這件事可能會容易得多,所以這個人可以自己去探索對象和我的Java代碼。

所以我想,我的問題是:什麼是最簡單的方法從Java序列化遷移到方便ascii形式編寫對象? (雖然我懷疑的答案是:你自己寫一個解析器:-)!)

+0

是你要反序列化序列化的客體 – 2012-08-11 10:28:34

回答

0

使用XML似乎是路要走這裏...

對於我們的項目一定的情況下,我們已經使用反序列化到XML通過Xstream。你也可以嘗試一下......這很容易。

0

我建議你的序列化對象應該被包裝成Base64編碼字符串,然後發送到另一個平臺,從Base64的解密,澆鑄新的對象,正如這裏所描述:How to serialize an object into a string

我見過許多實現給定的問題和Base64似乎是最簡單的方法。

0

我會去JSON,更容易,更人性化。 幾乎所有語言都有很多JSON庫。特別是對於我,我總是喜歡這兩個。

  1. GSON
  2. JACKSON

凡JACKSON存在一些性能advantages

也有simple guide

2

我建議你使用一些標準格式,如YAML或上述的JSON或XML。如果你的對象形成了一個沒有循環依賴的層次結構,我會選擇JSON並使用Jackson JSON processor - 積極開發並且易於使用。

如果你的對象有循環依賴關係,我會選擇YAML,因爲它可以使用references來處理,所以即使你有複雜的對象結構它也能工作。 SnakeYAML似乎是一個不錯的選擇。


我熱衷於測試另一個庫yamlbeans看看它是如何處理循環依賴,所以我做了一個小例子爲自己。那就是:

// YamlEx.java 
import java.io.*; 
import java.util.*; 
import com.esotericsoftware.yamlbeans.*; 

public class YamlEx { 
    public static void main(String argv[]) 
     throws Exception 
    { 
     Person p1 = new Person("John"); 
     Person p2 = new Person("Paul"); 
     Person p3 = new Person("Bob"); 

     // create a circular dependencies, even to self (p1-p1) 
     p1.setFriends2(p2, p1, p3); 
     p2.setFriends2(p1); 
     p3.setFriends2(p1, p2); 

     // serialize 
     CharArrayWriter w = new CharArrayWriter(); 
     YamlWriter writer = new YamlWriter(w); 
     writer.write(p1); 
     writer.close(); 

     // print it to the console 
     System.out.println(w.toString()); 

     // read it again 
     Reader r = new CharArrayReader(w.toCharArray()); 
     YamlReader reader = new YamlReader(r); 
     p1 = reader.read(Person.class); 
     reader.close(); 

     System.out.println(String.format("%s's friends: %s", 
        p1.name, p1.getFriends())); 
    } 
} 

// Person.java 

import java.util.*; 

public class Person { 
    // A public field as a test. 
    public String name; 

    public Person() { 
    } 
    public Person(String name) { 
     this.name = name; 
    } 

    public String toString() { 
     return name; 
    } 

    // A set/get pair as a test. 
    private List<Person> friends0; 
    public List<Person> getFriends() { 
     return friends0; 
    } 
    public void setFriends(List<Person> p) { 
     this.friends0 = p; 
    } 

    public void setFriends2(Person... p) { 
     setFriends(Arrays.asList(p)); 
    } 
} 

按預期工作:

&1 !Person 
name: John 
friends: !java.util.Arrays$ArrayList 
- &2 !Person 
    name: Paul 
    friends: !java.util.Arrays$ArrayList 
    - *1 
- *1 
- !Person 
    name: Bob 
    friends: !java.util.Arrays$ArrayList 
    - *1 
    - *2 

John's friends: [Paul, John, Bob] 
+0

yamlbeans可以創建這個文件,但它不能解析回來。檢查:http://code.google。COM/P/yamlbeans /問題/細節?ID = 9 – Andrey 2012-10-01 12:53:17

相關問題