将Java对象保存到文件中

时间:2013-06-12 03:17:47

标签: java serialization file-io save

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

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;
    }
}

5 个答案:

答案 0 :(得分:8)

您可以使用以下方法将对象序列化为JSONJackson,这将大大提高他们的人类可读性

答案 1 :(得分: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)

答案 2 :(得分:4)

您可以使用java.beans.XMLEncoder生成javabean的XML。 查看一个教程here

生成一个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>

答案 3 :(得分:1)

根据注释,JAXB marshalls和unmarshalls对象。注释允许您:

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

这是一个Oracle tutorial on JAXB

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

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

    @XmlTransient
    private String m_temp; 

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

    ...
}

答案 4 :(得分: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>

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