首页 > 编程 > Java > 正文

【待解决】java序列化问题

2019-11-08 02:29:18
字体:
来源:转载
供稿:网友

【背景】

今天在写servlet文件时,遇到一个警告。大致了解到是序列化问题,但并不影响使用,因此并未细看解决。

先将知识点贴出来,之后再看。

【问题】

java序列化问题

内容提要:Eclipse经常会有黄色惊叹号提示:The serializable class XXX does not declare a static final serialVersionUID field of type long

当一个类继承Serializable接口时,Eclipse经常会有黄色惊叹号提示。 提示内容如下:

The serializable class XXX does not declare a static final serialVersionUID field of type long

出现这样的警告处理办法:

其实这个问题出现的具体原因是和序列化中的这个serialVersionUID有关。

当采用程序的Add default Serial version ID修复时,Eclipse会加上:

PRivate static final long serialVersionUID = 1L;

serialVersionUID 用来表明类的不同版本间的兼容性,默认1L。

当采用程序的Add generated Serial version ID修复时,Eclipse会加上:

private static final long serialVersionUID = xxxxL; 

这是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。

什么是序列化

java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或 者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、 RMI等技术都是以此为基础的。

一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接 口即可。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。

什么情况下需要序列化   

1、当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

2、当你想用套接字在网络上传送对象的时候;

3、当你想通过RMI传输对象的时候;

java序列化注意事项

1、序列化时,只对对象的状态进行保存,而不管对象的方法;2、当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;3、当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;4、并非所有的对象都可以序列化

java序列化实例

import java.io.*;  public class  Box implements Serializable  {      private int width;      private int height;        public void setWidth(int width){          this.width  = width;      }      public void setHeight(int height){          this.height = height;      }        public static void main(String[] args){          Box myBox = new Box();          myBox.setWidth(50);          myBox.setHeight(30);            try{              FileOutputStream fs = new FileOutputStream("foo.ser");              ObjectOutputStream os =  new ObjectOutputStream(fs);              os.writeObject(myBox);              os.close();          }catch(Exception ex){              ex.printStackTrace();          }      }        } 

总结:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表