mybatis中为什么实体类要继承Serializable

public class HClass implements Serializable {
    public HClass(){

    }

    public HClass(String name, String city) {
        this.name = name;
        this.city = city;
    }
}

主要的原因是因为存储的内容可能会超出,然后就会存储到内存中,要用的时候要序列化,所以这里继承是为了有备无患;

这只是一种通俗易懂的说法,但要是想真正弄懂它,我们还需要了解什么是序列化?如何序列化?序列化的好处?用了序列化能干啥?

①什么是序列化;

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是java给你提供一种应该比你自己好的保存对象状态的机制,那就会序列化;换一种说法来说序列化就是一种用来处理对象流的机制。所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O)。我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!

②什么情况下需要序列化;

1、当你想把的内存中的对象保存到一个文件中或者数据库中时候;

2、当你想用序列化在网络上传送对象的时候;

3、当你想通过RMI传输对象的时候;

③如何序列化;

1、将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。然后使用一个输出流(如:FileOutputStream)来构造一个 

ObjectOutputStream(对象流)对象。接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

// 经常使用如下:
public static void main(String[] args) throws Exception {
    File file = new File("user.ser");
 
    ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));
    User user = new User("zhang", 18, Gender.MALE);
    oout.writeObject(user);
    oout.close();
 
    ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
    Object newUser = oin.readObject();
    oin.close();
    System.out.println(newUser);
}

 如没有 实现Serializable接口,在序列化时,使用ObjectOutputStream的write(object)方法将对象保存时将会出现异常。其实 java.io.Serializable 只是一个没有属性和方法的空接口;

2、在序列化的过程中,有些数据字段我们不想将其序列化,对于此类字段我们只需要在定义时给它加上transient关键字即可,对于transient字段序列化机制会跳过不会将其写入文件,当然也不可被恢复。但有时我们想将某一字段序列化,但它在SDK中的定义却是不可序列化的类型,这样的话我们也必须把他标注为transient,可是不能写入又怎么恢复呢?好在序列化机制为包含

这种特殊问题的类提供了如下的方法定义:

private void readObject(ObjectInputStream in) throws
IOException, ClassNotFoundException;
private void writeObject(ObjectOutputStream out) throws
IOException;
(注:这些方法定义时必须是私有的,因为不需要你显示调用,序列化机制会自动调用的)

使用以上方法我们可以手动对那些你又想序列化又不可以被序列化的数据字段进行写出和读入操作。

④序列化的好处;

把一个对象完全转成字节序列,方便传输,而且java的序列化是可以完全还原的;

posted @ 2020-05-19 11:20  等你的夏天  阅读(3544)  评论(3编辑  收藏  举报