美文网首页
Java-IO流-对象的序列化和反序列化

Java-IO流-对象的序列化和反序列化

作者: 码农随想录 | 来源:发表于2018-07-23 11:01 被阅读8次

    接口序列化

    import java.io.Serializable;
    
    /*
     * 序列化接口的作用:没有方法,不需要覆盖,是一个标记接口为了启动一个序列化功能。
     * 唯一作用,给每一个需要序列化的类都分配一个序列版本号。
     * 这个版本号和该类相关联。
     * 这个版本号有什么用呢?
     * 在序列化时,会将这个序列号也异同保存到文件中。
     * 在反序列化会读取这个序列化和本类的序列化进行匹配,如果不匹配会抛出异常。java.io.InvalidClassException
     * 哦,原来是用于验证的。
     * 
     * 那我们在序列化时,显示定义吗?
     * 
     * 
     */
    
    
    public class Person implements Serializable /*标记接口,用于启动类的序列化功能*/{
        
        
        private static final long serialVersionUID = 1234567L;
        private static String name;// 静态数据是不会被序列化。
        private transient/*瞬态*/ int age;//对于一个非静态的数据也不想序列化咋办?需要一个关键字来修饰。transient
        
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
        
        
    }
    

    ObjectOutputStream和ObjectInputStream

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    import cn.test.domain.Person;
    
    public class ObjectStreamDemo {
    
        /**
         * @param args
         * @throws IOException 
         * @throws ClassNotFoundException 
         */
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            //需求:想要将封装了数据的对象进行持久化。当写入的对象很多对象会按照顺序排列,也称之为对象的序列化。
            //1,应该先有对象。Person name age。
            //2,往硬盘写数据,进行持久化,需要io技术。输出流。FileOutputStream。
            //3,在字节输出流中按照名称规律在api找到一个子类 ObjectOutputStream
            //4,在基础流对象上使用额外功能。
            
    //      writeObj();
            
            
            
            //需求:读取已有的对象文件,并获取对象中的数据。
            //通过阅读ObjectOutputStream对象的文档,发现有一个对应的对象ObjectInputStream可以用于读区存储对象的文件
            //对象的反序列化。
            readObj();
    
        }
    
        public static void readObj() throws IOException, ClassNotFoundException {
    
            FileInputStream fis = new FileInputStream("tempfile/obj.object");
            ObjectInputStream ois = new ObjectInputStream(fis);
            
            Object obj = ois.readObject();
            
            System.out.println(obj.toString());
            
        }
    
        public static void writeObj() throws IOException {
            Person p = new Person("lisi",20);
            FileOutputStream fos = new FileOutputStream("tempfile/obj.object");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(p);
            
            oos.close();
            
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Java-IO流-对象的序列化和反序列化

          本文链接:https://www.haomeiwen.com/subject/oyydmftx.html