java 序列化 uid_【序列化】Serializable之SerialVersionUID

Serializable

可序列化接口,打开jdk   java.io  Serializable,发现,Serializable下没有任何的实现,我们称这样的接口为标志性接口 ,如果某对象,不实现Serializable会报没有序列化异常

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

Exception in thread "main" java.io.NotSerializableException: src.main.java.com.Io.user.User

什么是序列化

序列化,数据从内存到硬盘

反序列化:数据从硬盘到内存

序列化版本

某个对象实现了Serializable,java虚拟机会对加上Serializable的对象做一些特殊的处理,就是加上版本号SerialversionUID(java虚拟机的特殊照顾,加上SerialversionUID)

package src.main.java.com.Io.user;

import java.io.Serializable;

public class Person implements Serializable {

private String name;

public Person (String name) {

this.name= name;

}

@Override

public String toString() {

return "Person {" + "name='" + name+ '\'' + '}';

}

}

package src.main.java.com.Io.SerialVersionUIDTest;

import src.main.java.com.Io.user.Person;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

public class ObjectOutputStreamTest {

public static void main(String[] args) throws Exception {

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Io\\ObjectOutputStreamTest02.DBF"));

Person person = new Person("lhx");

oos.writeObject(person);

oos.flush();

oos.close();

}

}

package src.main.java.com.Io.SerialVersionUIDTest;

import java.io.FileInputStream;

import java.io.ObjectInputStream;

public class ObjectInputStreamTest02 {

public static void main(String[] args) throws Exception{

ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\Io\\ObjectOutputStreamTest02.DBF"));

Ojbect object=ois.readObject();

System.out.println(object);

ois.close();

}

}

这段代码本来没有问题,但是如果把Person.class删除,然后再次运行ObjectOutputStreamTest.java ,重新生成Person.class,这时候反序列化,是否可以成功,答案是不能,因为两次的SerialversionUID是不同的,下面是异常

java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible:

stream classdesc serialVersionUID = -3227847930051618824,

local class serialVersionUID = -5813841892307787810

类中描述的serialVersionUID是-3227847930051618824  本地类中的是-5813841892307787810

两者不一致,导致的问题

怎么办

不让系统自动生成serialVersionUID ,而是手动写定一serialVersionUID (重点),

否则可能出现无法反序列化的问题

public class Person implements Serializable {

private static final long serialVersionUID = 5813841892307787810;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值