关于Java的序列化和反序列化

xiaoxiao2021-02-27  209

  今天我们来谈一谈Java中的序列化和反序列化的问题。

  首先,为什么会有序列化和反序列化这两个问题。这是因为,在运行Java程序时,我们创建的Java对象都是保存在JVM的内存当中的,具体来说就是对象变量放在栈stack中,对象内容存放于堆heap中。但当对象使用完毕时JVM会在合适的时机来清除这个Java对象。为了便于我们使用和保存某个Java对象,我们通过二进制流的方式将某个Java对象整体保存到电脑的物理内存中,并给这个对象赋予一个标识号码,这就是Java对象的序列化。保存好对象之后,若果我们想要取得这个完整的Java对象,就需要仍然通过二进制流的方式从物理内存中读取到JVM的内存中,这就是反序列化。

  那么,怎么样实现一个对象的序列化呢?

  我们首先必须保证某个对象的类至少实现了两个接口Serializable或者Externalizable接口中的一个。其次最好在这个类中再声明一个静态的标识变量,用来标识当前这个类的内部细节的版本问题。若一个类的代码发生了变化,这个标识很可能会发生变化。具体实现类我们通过对象流来实现,即ObjectOutputStreaam来写出Java对象到物理内存中。

 反序列化时,我们通过ObjectInputStream来将物理内存中的Java对象写入到程序中。

  以上就是我对序列化和反序列化的理解和认识。

 

转载请注明原文地址: https://www.6miu.com/read-9857.html

最新回复(0)