• 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;                                                 
        }  
  • 相关阅读:
    HTTP 错误 404.2
    SQL Server 2008 R2如何开启数据库的远程连接(转)
    CSS中font-family:中文字体对应的英文名称
    15/18位身份证号码正则表达式(详细版)
    C#获取系统时间及时间格式
    C#正则表达式判断输入日期格式是否正确
    Linux查看机器负载
    模拟HTTP请求超时时间设置
    MySQL show命令的用法
    innodb事务隔离级别
  • 原文地址:https://www.cnblogs.com/mokpiet/p/13667175.html
Copyright © 2020-2023  润新知