2022-02-10

    java序列化着实令人困惑。找了一些博客看发现好多内容都一样。诶,但是让我找到了一篇讲的比较明白的文章。https://blog.csdn.net/qq_32575047/article/details/80070590 

    嗯,还是得让自己写一写,不然我过不了多久就会忘。

    什么是序列化?我的理解,就是将对象写入文件,该文件在你以文本形式阅读是无意义的(因为看不明白,一大堆奇怪的符号),并且Java虚拟机是可以将文件中的对象还原的,恢复至当时的状态。就如同游戏人物中的道具,等级,经验等东西,如果在关闭游戏后这些东西都没了,得从头开始。说实话劝退大多数人。但是,重新打开游戏后,对象的状态可以恢复,道具,等级,经验都会回复到原来的状态,就挺人性化的。

    代码:   

    import java.io.*;

//引入实现io的库

public class demo5 implements Serializable{

private int width;

private int height;

public void setWidth(int w){

width=w;

}

public void setHeight(int h){

height=h;

}

public static void main(String [] args){

demo5 demo =new demo5();

demo.setWidth(20);

demo.setHeight(50);

//当对象被实例化时,该对象引用的实例对象也会被实例化。且所有被引用的对象也会被实例化。操作实现时自动进行的。

try{

FileOutputStream  fs=new FileOutputStream("foo.ser");

//将文件写入规定的文件夹,如果没有文件夹就会创建一个新的文件夹

ObjectOutputStream os=new ObjectOutputStream(fs);

//将对象转换成可以写入的数据

os.writeObject(demo);

//写入对象

os.close();

//关闭方法,且释放内存

} catch(Exception ex){

ex.printStackTrace();

}

}

    结果:

注意的东西:1、首先类要实现Serializable接口

                      2、transient标注的变量,序列化时会被跳过

                      3、类序列化被还原之后,由于transient标注的变量在序列化时被跳过了,所以会给个 默认值  null。primitive主数据类型数据的默认值为0、false.

                      4、当对象被实例化时,该对象引用的实例对象也会被实例化。且所有被引用的对象也会被实例化。




    说句实在话,我在看书看博客后,自己写一遍,还是有些东西写不出来。欢迎大家指正,互相交流学习。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容