警告@SuppressWarnings("serial")
比如有个类实现了java.io.Serialize接口: package com.onede4.test; public class TestSerial implements java.io.Serializable { } 如果代码仅仅写上这样,放在eclipse里会给你提示一个黄色的警告,为啥呢,就是因为,你实现了Serializable 接口,但是没有给出 private static final long serialVersionUID = 5952689219411916553L; 类似这样的私有字段(这个字段是实现了Serializable接口需要的,但不必须) 只要加上类似这样的一个字段,黄色警告就会消失,但是你如果就是不想加这个字段,同时还不想看到那个黄色的警告,没问题,那就要在类上加一个注解(@SuppressWarnings("serial")) package com.onede4.test; @SuppressWarnings("serial") public class TestSerial implements java.io.Serializable { } 这样eclipse就不会有那个黄色的警告了 不过我们还是推荐给出private static final long serialVersionUID = 5952689219411916553L; 当你的类进行序列化和反序列化操作的时候如果没有这个字段可能会出问题,所以尽量加上这个字段,不要用@SuppressWarnings("serial")注解
对象序列化
对象序列化就是把一个对象变为二进制的数据流的一种方法。
如果一个类的对象想被序列化,则对象所在的类必须实现 java.io.Serializable 接口。
此接口的定义如下:
public interface Serializable{ };
可以发现在此接口中并没有定义任何的方法,所以此接口是一个标识接口。
表示一个类具备了被序列化的能力。
范例:定义可序列化的类
package org.lxh.demo12.serdemo;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "姓名:" + this.name + ";年龄 " + this.age;
}
}
以上的Person类已经实现了序列化接口,所以此类的对象是经过二进制数据流进行传输的。
而如果要完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象输
入流(ObjectInputStream)。
使用对象输出流输出序列化对象的步骤有时也称为序列化,而使用对象输入流读入对象的过程
有时也称为反序列化。
提示: 对象序列化和对象反序列化操作时的版本兼容性问题。
在对象进行序列化或反序列化操作时,要考虑JDK版本的问题。如果序列化的JDK版本和
反序列化的JDK版本不统一则有可能造成异常,所以在序列化操作中引入了一个
serialVersionUID的常量,可以通过此常量来验证版本的一致性。在进行反序列化时,JVM
会把传来的字节流中的serialVersionUID与本地相应实体(类)的
serialVersionUID进行比
较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID、类
类型为long的变量时,Java序列化机制在编译时会自动生成一个此版本的
serialVersionUID。
当然,如果不希望通过编译来自动生成,也可以直接显式地定义一个名为serialVersionUID、
类型为long的变量,只要不修改这个变量值得序列化实体,都可以相互进行串行化和反串行
化。
本程序中直接在Person中加入以下常量即可:
private static final long serialVersionUID = 1L;
serialVersionUID 的具体内容由用户指定。