2012-08-11 62 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

相关问题