java序列化

关于序列化

什么是序列化?

学过java的人大部分都知道,一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口。

为什么序列化?

感觉也没有用到序列化,但是,注意但是,在我们实体bean时,intlongboolean类型等,都是基本数据类型,数据库里面有与之对应的数据结构。我们以为的没有进行序列化,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。

我们发现基本类型都有具体的数据类型,类如String.Date等类型并不是基本类型,那我们也没有进行序列化,在这里必须声明一点,public final class String implements java.io.Serializable, Comparable<String>, CharSequencepublic class Date implements java.io.Serializable, Cloneable, Comparable发现了没有!它也序列化了。

那么!序列化为什么还要实现?

首先,谈一下序列化的目的,存储,传输。我们一般的实体类不需要程序员再次实现序列化的时候,自己问自己:问存储媒体里面,是否是有其相对应的数据结构?问这个实体类,是否需要远程传输(或者两个不同系统甚至是分布式模块之间的调用)?

打开Serializable接口的源码,这个接口其实是个空接口,那么这个序列化操作,到底是由谁去实现了呢?其实,看一下接口的注释说明就知道,当我们让实体类实现Serializable接口时,其实是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。

需要说明的是,当我们在实体类声明实现Serializable接口时,再次进行观察,会发现这些类是需要被远程调用的。也就是说需要或者可能需要被远程调用,这就是序列化便于传输的用途。

如果有注意观察的话,发现序列化操作用于存储时,一般是对于NoSql数据库,而在使用Nosql数据库进行存储时,用“freeze”这个说法来理解是再恰当不过了,请在NoSql数据库中,给我找出个varcharint之类的数据结构出来? 如果没有,但我们又确实需要进行存储,将对象进行序列化?

原文地址:https://www.cnblogs.com/DIVEY/p/9642399.html