1. Java对象序列化与反序列化已经被JSON与XML给代替了。
2. 序列化: 把Java对象转换为字节序列的过程。
3. 反序列化: 把字节序列恢复为Java对象的过程。
4. 对象序列化主要有两种用途:
  • 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
  • 在网络上传送对象的字节序列。
5. 只能将支持 java.io.Serializable 接口的对象写入流中。
6. 序列化方法: java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
7. 反序列化方法: java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
8. 示例如下
import java.io.Serializable;  

    /** 
     * <p>description 测试对象序列化和反序列化,对象Person</p> 
     * <p>date 2016年7月24日 下午9:25:51</p> 
     * @author Administrator 
     * @version 
     * @since 
     */  
    public class Person implements Serializable {  
        /** 
         * 序列化ID 
         */  
        private static final long serialVersionUID = -5809782578272943999L;  
        private int age;  
        private String name;  
        private String sex;  

        public int getAge() {  
            return age;  
        }  
        public void setAge(int age) {  
            this.age = age;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public String getSex() {  
            return sex;  
        }  
        public void setSex(String sex) {  
            this.sex = sex;  
        }  
    }
import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileNotFoundException;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    import java.text.MessageFormat;  

    /** 
     * @description 测试对象的序列化和反序列化 
     * @author Administrator 
     * @date 2016年7月24日 下午7:18:53 
     * @version 
     * @since 
     */  
    public class TestObjSerializeAndDeserialize {  

        static String pathname =  "resource/Person.txt";  

        public static void main(String[] args) throws Exception {  
            // TODO Auto-generated method stub  
            serializePerson();  
            Person p = deSerializePerson();  
            String pattern = "name={0},age={1},sex={2}";  
            Object[] arguments = {p.getName(),p.getAge(),p.getSex()};  
            System.out.println(MessageFormat.format(pattern, arguments));  
        }  

        /** 
         *  
         * <p>description 序列化Person对象</p> 
         * <p>date 2016年7月24日 下午9:23:36</p> 
         * @author Admin 
         *  
         * @throws FileNotFoundException 
         * @throws IOException 
         */  
        private static void serializePerson() throws FileNotFoundException, IOException{  
            Person person = new Person();  
            person.setName("bonjean");  
            person.setAge(25);  
            person.setSex("男");  
            //ObjectOutputStream对象输出流,将Person对象存储到resource目录的Person.txt文件中(pathname),完成对Person对象的序列化操作  
            ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File(pathname)));  
            oo.writeObject(person);  
            System.out.println("Person对象序列化成功!");  
            oo.close();  
        }  

        /** 
         *  
         * <p>description 反序列化Person对象</p> 
         * <p>date 2016年7月24日 下午10:23:25</p> 
         * @author Admin 
         *  
         * @return Person 
         * @throws Exception 
         * @throws IOException 
         */  
        private static Person deSerializePerson() throws Exception, IOException{  
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(pathname)));  
            Person person = (Person)ois.readObject();  
            System.out.println("Person对象反序列化成功!");  
            return person;  
        }  
    }