• 085-什么是序列化,序列化有什么作用?如何实现了序列化?


    序列化有什么作用?
      序列化可以将java装换成字节数组,用于对象之间的传输。

    如何实现了序列化?
      java中有一个Serializable接口,这个接口是在java.io包下,只要实现了这个接口的类,都可以实现序列化。

    如何将一个对象序列化?

           //1)先建立流通道,这里使用的是ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/下载/obj.txt"));
    
            //2)对象序列化,就是把对象保存到文件中,我们的obj.txt中存放的是16进制的字节数据,就相当于是class
            Student p1 = new Student("lisi", 23);
            oos.writeObject(p1);
    
            //3)关闭流
            oos.close();    

    如何将一个序列化的对象转换成对象?

          ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/下载/obj.txt"));
    
            //读取文件中的对象
            //readObject()方法的返回值类型是Object类型,读取文件中的Persn对象之后 , Object类定义的obj变量,实际引用的Person对象
            Object obj = ois.readObject();
            ois.close();
    
            //直接打印obj,会调用obj引用的Person对象的toString()
            System.out.println(obj);

    为什么一个对象实现Serializable接口之后就可以实现序列化了呢?
      我猜测当一个对象事项Serializable接口之后,肯定就会得到一个相应的序列化方法,然后我们的对象调用这个序列化的方法就可以实现序列化了。

      但是这怎么可能呢?我们只是实现了Serializable接口,但是我们并没有手动实现Serializable接口的方法啊?

      这主要是由于Serializable是一个空接口,它根本没有任何方法,他只是起到了一个标识的作用。

    如何使用序列化号起到了什么作用?

      可以将序列化后的文件转换成对象,要是没有这个序列化号,会报一个异常:invalidClassExcepliton(无效的类)
    造成的原因就是假使没有手动加载序列化号,则类的每次加载都会被虚拟机随即创建一个序列化号。

    如何是IDEA自动添加序列化号?

  • 相关阅读:
    获取枚举Description的Name
    MVC 3 RequiredIf validator for multiple values
    js关闭页面(兼容浏览器)
    js实现复制到剪切板
    Reverse Integer
    303. Range Sum Query
    326.Power of Three
    328. Odd Even Linked List
    面试基础知识点
    javaSE学习博客与笔记
  • 原文地址:https://www.cnblogs.com/pogusanqian/p/12712325.html
Copyright © 2020-2023  润新知