Serializable是Java提供的一套标准的序列化接口,是一个空接口,为对象提供序列化和反序列化操作.使用也是相当的简单,只要实现接口即可.
进行序列化和反序列化使用ObjectOutputStream和ObjectInputStream即可.
//序列化
User user= new User();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(System.out);
objectOutputStream.writeObject(user);
objectOutputStream.close();
//反序列化 byte数组为 序列化后的字节码
ObjectInputStream inputStream = new ObjectInputStream(
new ByteArrayInputStream(new byte[]{}));
User user = (User) inputStream.readObject();
inputStream.close();
serialVersionUID
Eclipse的朋友们都知道 实现Serializable接口后,会出现一个警告让其生成一个serialVersionUID 字段,idea默认是不警告的。
idea开启警告的方法:
默认情况下Intellij IDEA是关闭了继承了Serializable接口的类生成serialVersionUID的警告。如果需要IDE提示生成serialVersionUID,那么需要做以下设置:
1、setting->Inspections->Serialization issues,将serialzable class without "serialVersionUID"打上勾;
2、将光标放到类名上,按atl+enter键,就会提示生成serialVersionUID了
,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)
注意二 : 如何让部分字段不参与序列化
1 . 静态变量属于类,不属于对象,所以不参加对象的序列化
2 .使用transient修饰的变量不参与序列化
3. 父类未实现Serializable 字段不参与序列化