关于java的Serializable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java的Serializable相关的知识,希望对你有一定的参考价值。

public interface CommonDAO
public Serializable add(Object o);

上面接口里add方法的Serializable是什么意思?是要返回一个序列化对象?新增对象操作为什么还有返回值?

是返回一个序列化对象,返回序列化对象的目的是为了用instanceOf 进行比较。
上面的意思就是说 o 是object对象,当调用add方法的时候 o就实现了序列化,是一个序列化的对象,就可以调用instanceOf 进行判断
再说说为什么要实现序列化:
其实很简单,我们平时说的int,double等等类型的数据之所以能保存到电脑上,而且还可以再读出来,就是因为他们的包装类Interger,Double等实现了序列化。所以 我们就可以用输入输出流进行操作,而且属性不会变。如果我们想把一个对象进行这样的操作,那么我们就必须让这个对象实现序列化。
不知道你明白了没有。。。其实网上好多这方面的解释 ,多看看肯定会明白的。。。
参考技术A Serializable表明这个类可以直接写入一个流而进行存储,网络传输等操作。
对象序列化:这个序列化接口没有任何方法和域,仅用于标识序列化的语意。
就是可以把对象存到字节流,然后可以恢复!Integer实现了Serializable,所以可以把一个Integer的对象用IO写到文件里,之后再可以从文件里读出,如你开始写入的时候那个对象的intValue() 是5的话,那读出来之后也是5,,那么用序化类的作用。是用来传送类的对象。
参考技术B Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。
将需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列化。
如果想要序列化一个对象,首先要创建某些OutputStream(如FileOutputStream、ByteArrayOutputStream等),然后将这些OutputStream封装在一个ObjectOutputStream中。这时候,只需要调用writeObject()方法就可以将对象序列化,并将其发送给OutputStream(记住:对象的序列化是基于字节的,不能使用Reader和Writer等基于字符的层次结构)。而反序列的过程(即将一个序列还原成为一个对象),需要将一个InputStream(如FileInputstream、ByteArrayInputStream等)封装在ObjectInputStream内,然后调用readObject()即可。

PS:
a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
c) static,transient后的变量不能被序列化;

以上是关于关于java的Serializable的主要内容,如果未能解决你的问题,请参考以下文章

关于java中异常机制

关于Java爬虫的研究

java关于Socket连接错误问题

关于 Java 接口和多态性

1.关于Java

关于java面试