当前位置:编程学习 > XML/UML >>

JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)

什么是序列化
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。

正确使用序列化机制
一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。如下例定义了类Person,并声明其可以序列化。

[java] 
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.默认格式.

[java]
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格式

[java] 
//参考: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){ 
        &nbs

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,