4

我在Java中有以下课程。我希望能够将其保存为可以在不同电脑上移动的通用文件格式。我知道对象序列化,但我想知道我的其他选择是什么,它们各自的优缺点是什么。谢谢!例如,序列化文件不是人类可读的,因此是一个骗局。

public class NervousSystem {
    private CentralNervousSystem CNS;
    private PeripheralNervousSystem PNS;

    public NervousSystem(Neocortex neocortex, LateralGeniculateNucleus LGN, Retina retina) {
        this.CNS = new CentralNervousSystem(neocortex, LGN);
        this.PNS = new PeripheralNervousSystem(retina);
    }

    public CentralNervousSystem getCNS() {
        return this.CNS;
    }

    public PeripheralNervousSystem getPNS() {
        return this.PNS;
    }
}
4

5 回答 5

8

您可以使用例如Jackson将对象序列化为JSON,这将大大提高它们的人类可读性

于 2013-06-12T03:19:53.417 回答
5

对于 Json,使用 GSON ...

它支持任意复杂的对象,您不需要 setter 或 getter。Gson 只是想通了。

转换为 JSON

Gson gson = new Gson();
String myObjectJson = gson.toJson( myObj);
println myObjectJson 

从 JSON 转换

MyObj obj = gson.fromJson(myObjectJson, MyObj.class)
于 2013-06-12T03:59:27.787 回答
4

您可以使用java.beans.XMLEncoder. 在这里查看一个教程。

生成的一个 xml 示例:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_10" class="java.beans.XMLDecoder">
 <object class="com.test.MyBean">
  <void property="myBoolean">
   <boolean>true</boolean>
  </void>
  <void property="myString">
   <string>xml is cool</string>
  </void>
  <void property="myVector">
   <object class="java.util.Vector">
    <void method="add">
     <string>one</string>
    </void>
    <void method="add">
     <string>two</string>
    </void>
    <void method="add">
     <string>three</string>
    </void>
   </object>
  </void>
 </object>
</java>
于 2013-06-12T03:23:17.527 回答
1

JAXB 根​​据注释对对象进行编组和解组。注释允许您:

  • 控制序列化格式。
  • 将您的序列化格式与代码的某些重构隔离开来。
  • 标识要从序列化中排除的字段。

这是关于 JAXB 的 Oracle 教程

例如,带注释的类可能如下所示:

@XmlRootElement(name="foo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    @XmlTransient
    private String m_temp; 

    @XmlAttribute(name="fieldA")
    private String fieldA;

    ...
}
于 2013-06-12T03:44:10.423 回答
1

看看xstream,一个简单且常用的 Java XML 序列化库。简而言之,它看起来像这样(来自 xstream 网站的示例):

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // getters & setters
}

public class PhoneNumber {
  private int code;
  private String number;
  // getters & setters
}

XStream xstream = new XStream();
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
String xml = xstream.toXML(joe);

XML 内容如下所示:

<mypackage.Person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</mypackage.Person>

这是最简单的示例,您可以针对更复杂的情况进行大量自定义。

于 2013-06-12T07:29:33.520 回答