可以将序列化的java对象转换为文本吗?
我有一些读写Java对象(使用序列化)以及一些对象的代码。可以将序列化的java对象转换为文本吗?
我想将它们转换为文本,所以来自其他平台的其他人可以将这些对象与我的代码(仅作为包提供)一起使用。
我可以为对象编写一个完整的文本格式解析器。然而,这是一个截止日期,我希望以其他方式做这件事可能会容易得多,所以这个人可以自己去探索对象和我的Java代码。
所以我想,我的问题是:什么是最简单的方法从Java序列化迁移到方便ascii形式编写对象? (虽然我怀疑的答案是:你自己写一个解析器:-)!)
我建议你的序列化对象应该被包装成Base64编码字符串,然后发送到另一个平台,从Base64的解密,浇铸新的对象,正如这里所描述:How to serialize an object into a string
我见过许多实现给定的问题和Base64似乎是最简单的方法。
我建议你使用一些标准格式,如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]
yamlbeans可以创建这个文件,但它不能解析回来。检查:http://code.google。COM/P/yamlbeans /问题/细节?ID = 9 – Andrey 2012-10-01 12:53:17
是你要反序列化序列化的客体 – 2012-08-11 10:28:34