serializable接口

java中的Serializable接口

江枫思渺然 提交于 2020-03-21 15:43:12
实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。   序列化类的所有子类本身都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。允许非序列化类的子类型序列化,子类型可以假定负责保存和恢复父类型的公有的、保护的和(如果可访问)包的域的状态。只要该类(扩展)有一个无参构造子,可初始化它的状态,那么子类型就可承担上述职责。在这种情况下申明一个可序列化的类是一个错误。此错误将在运行时被检测。就是可以把对象存到字节流,然后可以恢复!   例如:Integer实现了Serializable,所以可以把一个Integer的对象用IO写到文件里,之后再可以从文件里读出,如你开始写入的时候那个对象的intValue() 是5的话,那读出来之后也是5。这一点体现了用序化类的作用,即用来传送类的对象。    所谓的Serializable,就是java提供的通用数据保存和读取的接口。 至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。 这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。 Object

Serializable接口

徘徊边缘 提交于 2020-03-10 10:54:28
一般情况下,我们在定义实体类时会继承Serializable接口,类似这样: 我们在实体类中引用了Serializable这个接口,那么这个接口到底有什么?细心的你会发现我们还定义了个serialVersionUID变量。这个变量到底有什么作用? 什么是Serializable接口一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。 什么是序列化? 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 为什么要序列化? 1 .对象把对象转换为字节序列的过程称为对象的序列化 2 .把字节序列恢复为对象的过程称为对象的反序列化 什么情况下需要序列化? 当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化那为什么还要继承Serializable。那是存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。 或许你会问,我在开发过程中,实体并没有实现序列化,但我同样可以将数据保存到mysql、Oracle数据库中,为什么非要序列化才能存储呢?我们来看看Serializable到底是什么,跟进去看一下,我们发现Serializable接口里面竟然什么都没有,只是个空接口。

Java序列化

社会主义新天地 提交于 2020-03-07 04:42:02
简要解释:  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。  序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。详细解释: 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以 二进制序列 的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。   只能将支持 java.io.Serializable 接口的对象写入流中。 每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有 对象的闭包 。 1.概念   序列化:把Java对象转换为字节序列的过程。

序列化Serializable接口

主宰稳场 提交于 2020-01-10 06:54:48
一、序列化 1.什么是序列化? 序列化就是将对象的状态存储到特定存储介质中的过程,也就是将对象状态转换为可保持或传输格式的过程。 在序列化过程中,会将对象的公有成员、私有成员(包括类名),转换为字节流,然后再把字节流写入数据流,存储到存储介质中,这里说的存储介质通常指文件。 序列化后的对象保存的是二进制状态,这样实现了平台无关性,通过反序列化得到对象,而无需担心数据因平台问题而显示异常。 2.使用序列化保存对象信息 序列化机制允许将实现序列化的Java对象转换为字节序列,这个过程需要借助I/O流来实现。 只有实现了java.io.Serializable接口的类的对象才能被序列化,Serializable表示可串行的,可序列化的(串行化)。 JDK中如String类、包装类和Date类等,都实现了Serializable接口。 二、反序列化 使用反序列化获取对象信息:1.创建一个对象输出流(ObjectInputStream),它可以包装一个其它类型的输入流。2.通过对象输入流的readObject()方法读取对象,该方法返回一个object类型的对象,如果程序知道该Java对象的类型,则可以将该对象强制转换成其真实的类型。 1 import java.io.FileNotFoundException; 2 import java.io.FileOutputStream; 3

Java8基础之Serializable接口

混江龙づ霸主 提交于 2019-12-22 03:13:05
Serializable接口介绍 Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象。简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。 序列化是指把对象转换为字节序列的过程,我们称之为对象的序列化,就是把内存中的这些对象变成一连串的字节(bytes)描述的过程。 而反序列化则相反,就是把持久化的字节文件数据恢复为对象的过程。 serialVersionUID介绍 对于JVM来说,要进行持久化的类必须要有一个标记,只有持有这个标记JVM才允许类创建的对象可以通过其IO系统转换为字节数据,从而实现持久化,而这个标记就是Serializable接口。而在反序列化的过程中则需要使用serialVersionUID来确定由那个类来加载这个对象,所以我们在实现Serializable接口的时候,一般还会去显示地定义serialVersionUID。在反序列化的过程中,如果接收方为一个类的对象声明

谨慎的使用 Serializable 接口(74)

拜拜、爱过 提交于 2019-12-20 10:30:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序列化带来的直接开销非常低,但是长期开销是实实在在的 实现 Serializable 接口最大的代价就是 一旦一个类发布,大大降低了改变其实现的灵活性 因为此时,它的字节流编码就变成了其导出API的一部分 如果不设计一种自定义序列化形式,仅仅使用默认序列化, 那么私有和包级私有实例,都变成导出api的一部分 不符合最低限度访问域的准则 默认序列化可能出现新老版本序列化和反序列化不兼容 仍然保留老接口,会带来别的问题、隐患 仔细设计一种高质量的序列化形式,长期使用,初始付出的成本是值得的 序列化会使得类的演变受到限制 流的唯一标识符有关(序列版本UID) private static final long serialVersionUID = 1L; 如果不定义该标识符,会在运行时,调用一个复杂的过程自动生成 而且内部改变,会导致,自动计算id 值改变,序列化兼容被打破 导致InvalidClassException 实现 Serializable 第二个代价: 增加了出现 BUG、安全漏洞的可能性 对象是构造器创建的 序列化机制是语言之外的对象创建机制 反序列化机制都是一个隐藏的构造器 该构造器相对于真正的构造器,约束条件往往被忽略 默认序列化机制的反序列化过程的约束关系很容易遭到破坏、非法访问 第三个代价:

Serializable(转)

巧了我就是萌 提交于 2019-12-05 23:48:38
最近在阅读JDK源码中的集合,看到很多集合类实现了Serializable接口,Cloneable接口。在阅读了很多关于Serializable接口的博客后,浅谈下我对Serializable接口的理解。 序列化 查看 官方文档 就会发现 Serializable接口中一个成员函数或者成员变量也没有。那么这个接口的作用是什么呢。网上找了一些博客看过之后,知道这个接口的作用是实现序列化。 序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。 总结:Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里(系列化),并且可以从其它地方把该Byte 流里的数据读出来(反序列化)。 系列化的用途 想把的内存中的对象状态保存到一个文件中或者数据库中时候 想把对象通过网络进行传播的时候 如何序列化 只要一个类实现Serializable接口,那么这个类就可以序列化了。 例如有一个 Person类,实现了Serializable接口,那么这个类就可以被序列化了。 class Person implements Serializable{ private

Serializable接口

蹲街弑〆低调 提交于 2019-12-02 10:44:25
英 [ˈsɪərɪəlaɪzəbl],可串行化的 一、什么是Serializable接口? 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化 二、什么是序列化? 对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。 Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里(系列化),并且可以从其它地方把该Byte 流里的数据读出来(反序列化)。 三、什么情况下需要序列化? 当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化 四、为什么需要序列化 1,存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。 2,便于数据传输,尤其是在远程调用的时候! 五、总结 Serializable接口是一个里面什么都没有的接口 它的源代码是public interface Serializable{},即什么都没有。 如果一个接口里面什么内容都没有,那么这个接口是一个标识接口,比如,一个学生遇到一个问题,排错排了几天也没解决,此时,她举手了

实体bean为什么一定要实现Serializable接口

守給你的承諾、 提交于 2019-11-27 07:30:28
一、什么是序列化 In computer science, in the context of data storage, serialization is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and reconstructed later in the same or another computer environment.[1] When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. 那我也有看过很多的博客包括书,但是我之前其实一直不太理解这个序列化,虽然一直都在用。今天在看资料 的时候,发现导致这种现象的原因,可能是我之前看的一些介绍里面,忽略了一个很关键的因素:object