本文主要介绍java序列化的相关资料以及serialVersionUID的使用实例。这里讲解了详细的使用方法,让你学的透彻。有需要的朋友可以参考一下。
java序列化和serialVersionUID的使用方法实例
1、序列化:
序列化可以将一个java对象以二进制流的形式在网络中传输,并且可以持久化到数据库或文件系统中,而反序列化可以将之前持久化在数据库或文件系统中的二进制数据读取出来,重新构造成与之前内容相同的java对象。
2、序列化的作用:
第一种:用来存储java对象的状态,通常是在一个文件中,以便下次需要时可以读取之前的状态信息。
第二:java对象可以在网络中传输。
3、序列化的实现:
1)要序列化的类需要实现Serializable接口,这个接口没有方法,只是表示类对象可以序列化。
2)序列化过程:用一个输出流(比如FileOutputStream)构造一个objectOutputStream(对象流)对象,然后用ObjectOutputStream对象的writeObject(Object obj)方法写出带有obj参数的对象(即保存其状态)。
3)反序列化过程:用一个输入流(例如FileInputStream)构造一个ObjectInputStream (Object Stream)对象,然后用ObjectInputStream对象的readObject(Object obj)方法读出带有obj参数的对象(即获取其状态)。
4.静态长常量serialVersionUID的功能:
如果未设置此值,并且在序列化对象后更改了该类的字段或方法名,则在反序列化前一个对象时可能会引发异常,因为您在类中间更改了信息。serialVersionUID根据类名、接口名、成员方法和属性等生成一个64位哈希字段。反序列化修改后的类时,发现该类的serialVersionUID值与之前保存在要价中的serialVersionUID值不一致,因此会抛出异常。
显示的设置serialVersionUID值可以确保版本的兼容性。如果在类中写入此值,即使该类发生更改,它也可以在反序列化时匹配文件中的原始值。新添加的值将被设置为null,删除的值将不会显示。
5、例子:
包com.sxit
导入Java . io . file;
导入Java . io . file inputstream;
import Java . io . filenotfoundexception;
导入Java . io . file output stream;
导入Java . io . io exception;
导入Java . io . objectinputstream;
导入Java . io . object output stream;
导入Java . io . serializable;
公共类Serializable01扩展对象实现Serializable{
private static final long serial version uid=-1466479389299512377 l;
公共字节b=12
公共字节getB() {
返回b;
}
公共void setB(字节b) {
this.b=b
}
公共静态void main(String[] args) {
尝试{
File output stream fos=new File output stream(新文件(' E:\ \ tmp \ \ demo 2 . txt '));
object output stream OS=new object output stream(fos);
serializable 01s=new serializable 01();
os.writeObject
OS . flush();
OS . close();
File inputstream fis=new File inputstream(新文件(' E:\ \ tmp \ \ demo 2 . txt '));
ObjectInputStream ois=新的ObjectInputStream(fis);
serializable 01 S2=(serializable 01)ois . read object();
system . out . println(S2 . getb());
ois . close();
} catch(file not found exception e){
e . printstacktrace();
} catch (IOException e) {
e . printstacktrace();
} catch(ClassNotFoundException e){
e . printstacktrace();
}
}
}
6、序列化特点:
1)如果一个类可以序列化,那么它的子类也可以序列化。如果类有父类,则可以根据父类是否实现可序列化接口来序列化父类对象字段。否则,父类对象字段不能序列化。
2)声明为瞬态类型的成员数据不能序列化。Transient表示对象的临时数据;
3)当一个对象的实例变量引用其他对象时,被引用的对象在对象序列化时被序列化;
以上是对java序列化和serialVersionUID的解释。如有疑问,欢迎留言或前往本站社区讨论。感谢您的阅读。希望能帮到你。感谢您对本站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。