2013-06-12 3 views
4

У меня есть следующий класс в Java. Я хотел бы иметь возможность сохранить его в общий формат файла, который мог бы перемещаться по разным компьютерам. Я знаю о сериализации объектов, но мне было интересно, какие у меня другие варианты и каковы их плюсы и минусы. Благодаря! Например, сериализованный файл не является читаемым человеком и, следовательно, con.Сохранение объектов 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; 
    } 
} 
+0

Вы можете взглянуть на [Java Architecture for XML Binding] (http://docs.oracle.com/javase/tutorial/jaxb/) – MadProgrammer

ответ

5

Для Json используйте GSON ...

Он поддерживает сколь угодно сложные объекты, и вам не нужно сеттеры или геттеров. Г-н просто все это излагает.

Преобразование в формат JSON

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

Преобразовать из JSON

MyObj obj = gson.fromJson(myObjectJson, MyObj.class) 
+0

Большое спасибо! Но теперь, когда это строка, я должен сохранить ее в текстовый файл или что-то еще? –

+0

Вы можете делать все, что хотите, сериализовать файл как json, он будет переносимым и читаемым в этой форме. – raffian

8

Вы можете сериализовать объекты на JSON, используя, например, Jackson, что значительно улучшит их читаемость для человека

4

Вы можете создать XML своего javabean, используя java.beans.XMLEncoder. Проверьте один учебник 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> 
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; 

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

Это самый простой пример, вы можете сделать много настроек для более сложных ситуаций.

Смежные вопросы