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 字段不参与序列化
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于