Java serialVersionUID作用

今天在学习Java的文件输入输出时,学习了高级流ObjectInputStream,它使用了是序列化的写入和写出,在写出的时候遇到了一个错误:java.io.InvalidClassException:local class incompatible: stream classdesc serialVersionUID = …, local class serialVersionUID = …

在网上找了一些solution,解决办法如下:在实现serializable接口的类中,定义一个serialVersionUID变量,类型为public static final long,以我的为例:

public final static long serialVersionUID = -8497580858753153590l;

具体的作用我是参考的这一篇文章,May it helpful!   http://swiftlet.net/archives/1268

下面提一下代码:

 1 import java.io.Serializable;
 2 import java.util.List;
 3
 4 public class Person implements Serializable{
 5     private String name;
 6     private int age;
 7     private char sex;
 8     private List<String> list;
 9     public final static long serialVersionUID = -8497580858753153590l;
10
11     Person(String name,int age,char sex,List<String> list){
12         this.name = name;
13         this.age = age;
14         this.sex = sex;
15         this.list = list;
16     }
17     public String toString(){
18         return name+" "+age+" "+sex+" "+list;
19     }
20
21 }

上面是构造的一个辅助类,下面是流的实例类。

 1 import java.io.FileInputStream;
 2 import java.io.FileNotFoundException;
 3 import java.io.IOException;
 4 import java.io.ObjectInputStream;
 5 public class OIS {
 6
 7     public static void main(String[] args) throws IOException, ClassNotFoundException {
 8         // TODO Auto-generated method stub
 9         FileInputStream  fis = new FileInputStream("person.obj");
10         ObjectInputStream ois = new ObjectInputStream(fis);
11         Person per = (Person)ois.readObject();
12
13         System.out.println(per);
14         ois.close();
15
16     }
17
18 }

原文地址:https://www.cnblogs.com/kevin-lee123/p/9172376.html

时间: 2024-11-10 20:28:41

Java serialVersionUID作用的相关文章

【java】serialVersionUID作用

serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException. serialVersionUID有两种显示的生成方式:        一是默认的1

JAVA static 作用

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的

关于java的作用

关于java的作用,主要就是编程(这个是老师要求的,随便应付一下的)

71. Java中序列化的serialVersionUID作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象. 序列化是Java中实现持久化存储的一种方法:为数据传输提供了线路级对象表示法. Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常. Eclipse中The

java设计模式之适配器模式以及在java中作用

适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等. 以InputStreamReader和OutputStreamWriter类为例. InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream 的实例,InputStreamReader和Out

转:serialVersionUID作用

汗,以前学了还忘了... Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常. Eclipse中The serializable class XXXXXX does not declare a static final serialVers

serialVersionUID作用

serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException. serialVersionUID有两种显示的生成方式:        一是默认的1

java内部类作用

推荐一. 定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访问权限 3.可是实现多重继承 4.可以避免修改接口而实现同一个类中两种同名方法的调用. 三.   例子 1.实现隐藏 平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类

Java &amp; hashCode作用

首先,想要明白hashCode的作用,你必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了.也就是说,如果集