• Java IO学习总结(三)


    一、对象序列化

            序列化就是把内存中的java对象转换成与平台无关的二进制流,从而把这种二进制流保存在磁盘,或者通过网络传输到另一个网络节点;一旦获取到这个二进制流也可以恢复成Java对象。序列化可以使对象脱离程序的运行而独立存在。

            Java对象序列化,则该类必须实现Serializable接口或者Externalizable接口。

            示例代码

    public class SerializableTest {
        public static void main(String[] args) {
            try {
                // 序列化
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\demo.txt"));
                Demo demo = new Demo(18, "test");
                oos.writeObject(demo);
                
                // 反序列化
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\demo.txt"));
                Demo de = (Demo)ois.readObject();
                System.out.println("age:" + de.getAge() + ";name:" + de.getName());
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
        }
    }
    
    public class Demo implements Serializable{
        private int age;
        private String name;
        
        public Demo(int age, String name) {
            super();
            this.age = age;
            this.name = name;
        }
        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;
        }
    }

    二、对象引用序列化

    Java序列化对象时,引用的对象也必须实现Serializable接口,Java序列化机制是:所以保存在磁盘的对象都有一个序列化编号,当程序视图序列化一个对象时,首先检查该对象是否被序列化,如果已经被序列化,程序则直接输出一个序列化编号,否则进行序列化。

    示例代码

    public class SerializableTest {
        public static void main(String[] args) {
            try {
                // 序列化
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\demo.txt"));
                Demo demo = new Demo(18, "test");
                Demo1 demo1 = new Demo1("test1",demo);
                Demo1 demo2 = new Demo1("test2",demo);
                oos.writeObject(demo);
                oos.writeObject(demo1);
                oos.writeObject(demo2);
                oos.writeObject(demo1);
                
                // 反序列化
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\demo.txt"));
                Demo de = (Demo)ois.readObject();
                Demo1 de1 = (Demo1)ois.readObject();
                Demo1 de2 = (Demo1)ois.readObject();
                Demo1 de3 = (Demo1)ois.readObject();
                System.out.println(de==de1.getDemo());
                System.out.println(de==de2.getDemo());
                System.out.println(de1==de3);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    
    public class Demo1 implements Serializable{
        private String name;
        private Demo demo;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Demo getDemo() {
            return demo;
        }
        public void setDemo(Demo demo) {
            this.demo = demo;
        }
        public Demo1(String name, Demo demo) {
            super();
            this.name = name;
            this.demo = demo;
        }
        
    }

    结果是:

    true
    true
    true
  • 相关阅读:
    vue列表排序实现中的this问题
    JavaScript:JSON 和 JS 对象
    vue项目设置每个页面的title
    webpack开发和生产两个环境的配置详解
    关于vuex的理解
    vue的路由配置
    js 的静态获取和动态获取
    7 Dockerfile指令详解 && VOLUME 指令
    HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式
    haproxy开启日志功能
  • 原文地址:https://www.cnblogs.com/quina520/p/7266220.html
Copyright © 2020-2023  润新知