java序列化java.io.Externalizable
- - Java - 编程语言 - ITeye博客这次我们讲的是控制对象的序列化和反序列化. 控制序列化就是有选择的序列化对象,而不是把对象的所以内容都序列化,前篇我们的例子中介绍了transit变量和类变量(static)不被序列化,现在我们还有一种更为灵活的控制对象序列化和反序列方法,可以在序列化过程中储存其他非this对象包含的数据. 我们现在再来介绍一个接口 java.io.Externalizable.
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name;; private int age; public Person(){ } public Person(String str,int n){ System.out.println("Inside Person's Constructor"); name = str; age = n; } public String getName() { return name; } public int getAge() { return age; } }
下面为三种格式转换的代码:
1.默认格式.
public class SerializeToFlatFile { public static void main(String[] args) { SerializeToFlatFile ser = new SerializeToFlatFile(); ser.savePerson(); ser.restorePerson(); } public void savePerson(){ Person myPerson = new Person("Jay", 24); try{ FileOutputStream fos = new FileOutputStream("E:\\person.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println("Person--Jay,24---Written"); oos.writeObject(myPerson); oos.flush(); oos.close(); }catch(Exception e){ e.printStackTrace(); } } @SuppressWarnings("resource") public void restorePerson(){ try{ FileInputStream fls = new FileInputStream("E:\\person.txt"); ObjectInputStream ois = new ObjectInputStream(fls); Person myPerson = (Person)ois.readObject(); System.out.println("\n---------------------\n"); System.out.println("Person --read:"); System.out.println("Name is:"+myPerson.getName()); System.out.println("Age is :"+myPerson.getAge()); }catch(Exception e){ e.printStackTrace(); } } }
输出结果: sr test.serializable.Person I ageL namet Ljava/lang/String;xp t Jay
2.XML格式
//参考:http://www.cnblogs.com/bluesky5304/archive/2010/04/07/1706061.html public class SerializeXML { public static void main(String[] args) { SerializeXML ser = new SerializeXML(); ser.serializeToXml(); ser.deSerializeFromXml(); } public void serializeToXml(){ Person[] myPersons = new Person[2]; myPersons[0] = new Person("Jay", 24); myPersons[1] = new Person("Tom", 23); XStream xStream = new XStream(); xStream.alias("Person", Person.class); try{ FileOutputStream foStream = new FileOutputStream("E:\\persons.xml"); xStream.toXML(myPersons,foStream); }catch(Exception e){ e.printStackTrace(); } } public void deSerializeFromXml(){ XStream xStream = new XStream(); xStream.alias("Person", Person.class); Person[] myPersons = null; try{ FileInputStream flStream = new FileInputStream("E:\\persons.xml"); myPersons = (Person[])xStream.fromXML(flStream); if(myPersons!=null){ for(Person person:myPersons){ System.out.println(person.getName()); System.out.println(person.getAge()); } } }catch(Exception e){ e.printStackTrace(); } } }
输出结果:
<Person-array> <Person> <name>Jay</name> <age>24</age> </Person> <Person> <name>Tom</name> <age>23</age> </Person> </Person-array>
//参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html public class SerializeJSON { public static void main(String[] args) { SerializeJSON serializeJSON = new SerializeJSON(); serializeJSON.writeJSON(); serializeJSON.readJSON(); } public void writeJSON(){ XStream xStream = new XStream(new JettisonMappedXmlDriver()); Person person = new Person("geniushehe", 16); try { FileOutputStream fos = new FileOutputStream("E:\\json.js"); xStream.setMode(XStream.NO_REFERENCES); xStream.alias("Person", Person.class); xStream.toXML(person, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void readJSON(){ XStream xStream = new XStream(new JettisonMappedXmlDriver()); Person person = null; try { FileInputStream fis = new FileInputStream("E:\\json.js"); xStream.setMode(XStream.NO_REFERENCES); xStream.alias("Person", Person.class); person = (Person)xStream.fromXML(fis); System.out.println(person.getName()); System.out.println(person.getAge()); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
{"Person":{"name":"geniushehe","age":16}}