簡體   English   中英

將Java對象保存到文件中

[英]Saving Java objects into files

我在Java中有以下類。 我希望能夠將它保存為一個通用的文件格式,可以在不同的PC上移動。 我知道對象序列化但我想知道我的其他選擇是什么以及它們各自的優缺點是什么。 謝謝! 例如,序列化文件不是人類可讀的,因此是騙局。

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

您可以使用例如Jackson將對象序列化為JSON ,這將極大地提高他們的人類可讀性

對於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)

您可以使用java.beans.XMLEncoder生成javabean的XML。 在這里查看一個教程。

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

根據注釋,JAXB marshalls和unmarshalls對象。 注釋允許您:

  • 控制序列化格式。
  • 將序列化格式與代碼的某些重構隔離開來。
  • 確定要從序列化中排除的字段。

這是關於JAXBOracle教程

例如,帶注釋的類可能如下所示:

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

    @XmlTransient
    private String m_temp; 

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

    ...
}

看看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>

這是最簡單的示例,您可以針對更復雜的情況進行大量自定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM