Serializable是Java的一种序列化技术,它可以将Java的在内存中的对象转换成可以存储或传输的字节流。它可以将对象以字节流的形式在网络上进行传输,存储到文件中,也可以把字节流读取在内存中创建对象。序列化能够解决跨平台运行的问题,比如Desktop和手机。
1、 什么是序列化?
序列化可以定义为一种Java的技术,它能够将现存的Java对象转换成字节流的形式,这种字节流可以存储在磁盘上,用来传输,或者在网络之间进行传输,结合反序列化,还可以将字节流读取变成现存的Java对象。
2、序列化的好处
(1)可以把对象在不同地方间转移。序列化可以使得一个对象可以在任何地方存储或者传输,它们可以在任何地方被访问。
(2)可以节省内存空间。通过序列化,可以将对象存储在文件中,减少内存的开销。
(3)跨平台。序列化可以让对象可以跨不同操作系统之间转移,比如可以把desktop应用程序中的对象传输到手机端。
3、什么是反序列化
反序列化是一种将字节流重新转换成可以在内存中读取的对象的过程。它可以从存储在磁盘中的文件里读取字节流,把它们转成真正的Java对象,然后再进行操作。
4、如何使用序列化
要使用序列化,必须让Java的对象实现java.io.Serializable接口,在这个接口里面没有任何抽象方法,只是一个接口的声明。Popular GUis用到的关于实现序列化的最简单的方法就是定义一个类实现java.io.Serializable接口,将对象实例化后通过ObjectOutputStream进行序列化,如果需要恢复可以使用ObjectInputStream进行反序列化操作。
5、序列化注意事项
(1)使用序列化之前,实现Serializable接口的类应该提供一个特殊的serialVersionUID变量作为版本标记。
(2)请不要使用不可序列化的类来传递对象,因为在序列化时,对象中所有不可序列化的对象都会抛出NotSerializableException异常
(3)确保实现的类的所有变量是不可变的。序列化时只会序列化对象的当前状态,而不会序列化变量的历史状态,因此实现类中的变量在序列化之前必须是不可变的。
(4)谨慎使用静态变量,因为静态变量属于类,而不属于一个对象,当对象被序列化之后,只有对象被反序列化之后才能够有一个新的副本,但是静态变量不受影响,它依然保持它以前的值,因此在使用序列化时静态变量必须要小心处理。
综上所述,serializable 是Java的一种序列化技术,它可以将Java的在内存中的对象转换成可以存储或传输的字节流。它可以跨不同平台实现对象的传输和存储,用来减少内存空间的使用,可以通过实现Serializable接口,将实例化的对象进行序列化操作,并且要注意实现该接口的类中的变量必须是不可变的,以及要小心处理静态变量。
Serializable,简言之,就是可序列化的概念。它是Java中一个核心接口,它给予了类实例可以被序列化的能力。
1、什么是序列化?
序列化是指将对象状态从内存中可以转换为一种可以在网络上传输或在本地存储的格式的过程,即把对象状态打包在本地空间内,或发送到网络中的过程。既然网络传输的是二进制数据,序列化的重要作用就是把内存中的对象转换为字节序列,从而使得网络传输或本地储存成为可能。
2、Serializable接口介绍
Serializable是Java中的一个核心接口,实现该接口后可以使得类实例具备可序列化的能力。Serializable接口本身是一个没有任何功能的标记接口,它没有任何的父类,它只是一个可以被扩展的协议,并不实现任何的方法或数据结构,它的实现只是一种技术手段,用来标记类的序列化能力的。
3、Serializable的使用
当想要把对象进行网络传输或者本地化存储时,就需要实现Serializable接口才可以,之后把对象序列化以后,就可以得到一个字节流,这种字节流就代表了对象在网络中传输或本地存储的形式。当需要把字节流恢复成原来的对象时,就需要反序列化技术,把字节流还原成对象。
4、反序列化
反序列化是指利用Java中Serializable接口实现对对象状态还原的过程,即从被序列化后的二进制数据中恢复出原来的对象,反序列化就是一种还原过程,可以把得到的字节流还原回原来的对象。
5、Serializable的优点
由于序列化的特性,意味着对象可以从内存序列化到各种文件中去或者在网络上传输,因此序列化机制可以让对象具有持久化的能力,序列化不仅可以用来传输对象,还可以用来在本地持久化储存,可以把被序列化的对象转存入文件中,而这又是现在大部分程序都需要做到的技术要求,因此序列化技术就具有重要的作用。