zoukankan      html  css  js  c++  java
  • 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自动添加序列化号?

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/pogusanqian/p/12712325.html
Copyright © 2011-2022 走看看