6.序列化和反序列化

6.1 什么是序列化和反序列化

          6.1.1 序列化就是把java对象转换为字节序列的过程

                   例如我们之前玩单机游戏的时候玩到一定时间不想玩了,想休息一会,哎这个时候我们可以存档,这个存档的动作就是序列化的动作,可以把我们的等级,经验,血量,怪物的血量 等等这些信息 作为对象转换为二进制文件存储在硬盘中,这样我们过再多时间不玩 这些存档依然还在(只要硬盘不被损坏)

 

          6.1.2 反序列化就是把字节序列转换为java对象的过程

                   反序列化就是把我们之前的游戏存档再读出来转换为对象的过程

6.2 序列化的作用

           6.2.1 序列化是以某种存储形式使自定义对象持久化

           6.2.2 可以将对象从一个地方传递到另一个地方

           6.2.3 使程序更具维护性。

6.3 实现序列化和反序列化的过程

           6.3.1 实现序列化的必要要求

                    只有实现了 Serializable 或者Externalizable 接口的类的对象才能被序列化为字节序列(不是则会抛出异常)

           6.3.2 JDK中序列化和反序列化的API

                    6.3.2.1 java.io.ObjectInputStream: 输入流

                                该类的 readObject() 方法从输入流中读取字节序列,然后将字节序列反序列化为一个对象并返回。

                    6.3.2.2 java.io.ObjectOutputStream: 输出流

                                该类的 writeObject(Object obj) 方法将传入的 obj 对象进行序列化,把得到的字节序列写入到目标输出流中进行输出

注意:被transient修饰的实例变量不能被序列化化或者反序列化(因为被transient修饰的实例变量是临时实例变量)

序列化和反序列化的代码实例:

 

public class SerializableTest {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            //序列化
            FileOutputStream fos = new FileOutputStream("object.out");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            User user1 = new User("lihao", "wjwlh", "21");
            oos.writeObject(user1);
            oos.flush();
            oos.close();
            //反序列化
            FileInputStream fis = new FileInputStream("object.out");
            ObjectInputStream ois = new ObjectInputStream(fis);
            User user2 = (User) ois.readObject();
            System.out.println(user2.getUserName()+ " " + user2.getPassword() + " " + user2.getAge());
}

 

 

 

 

public class User implements Serializable{                             
                                                                          
    private static final long serialVersionUID = -6060343040263809614L;   
                                                                          
    private String userName;                                              
    private String password;                                              
    private String age;                                                  
                                                                          
    public String getUserName() {                                         
        return userName;                                                  
    }                                                                     
                                                                          
    public String getPassword() {                                         
        return password;                                                  
    }                                                                     
                                                                          
    public void setUserName(String userName) {                            
        this.userName = userName;                                         
    }                                                                     
                                                                          
    public void setPassword(String password) {                            
        this.password = password;                                         
    }                                                                     
                                                                          
    public String getAge() {                                             
        return age;                                                      
    }                                                                     
                                                                          
    public void setAge(String age) {                                    
        this.age = age;                                                 
    }                                                                     
                                                                          
    public Student(String userName, String password, String age) {       
        this.userName = userName;                                         
        this.password = password;                                         
        this.age = age;                                                 
    }  

 

posted @ 2020-09-14 15:51  mokpiet  阅读(142)  评论(0编辑  收藏  举报