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自动添加序列化号?

 

posted on 2020-04-16 13:43  十年磨三劍  阅读(336)  评论(0编辑  收藏  举报

导航