Java序列化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java序列化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2875字,纯文字阅读大概需要5分钟。
内容图文
![Java序列化](/upload/InfoBanner/zyjiaocheng/745/18c31ee4fecb4f2583713020e7eebcd1.jpg)
什么是序列化,什么是反序列化
序列化
把对象转换为字节序列的过程称为对象的序列化
反序列化
把字节序列恢复为对象的过程称为对象的反序列化
为什么序列化
- 持久存储时
- 网络传输时
- 通过RMI传输对象时
如何实现序列化
实现方式
实现Serializable接口
遇到的问题
- transient 修饰的属性,不会被序列化
- 静态static的属性,它不序列化
- 实现这个Serializable接口的时候,SerialVersionUID赋值
- 当属性是对象的时候,对象也有实现序列化接口
示例代码:
定义一个对象FlyPig对象:
package test;
import java.io.Serializable;
public class FlyPig implements Serializable {
private static final long serialVersionUID = 1L;
private static String AGE = "269";
private String name;
private String color;
transient private String car;
public static String getAGE() {
return AGE;
}
public static void setAGE(String AGE) {
FlyPig.AGE = AGE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getCar() {
return car;
}
public void setCar(String car) {
this.car = car;
}
}
编写测试类:
package test;
import java.io.*;
public class serializableTest {
public static void main(String[] args) throws Exception{
serializeFlyPig();
FlyPig flyPig = deserializeFlyPig();
System.out.println(flyPig.getAGE()+ " " + flyPig.getName() + " " + flyPig.getColor() + " " + flyPig.getCar());
}
//序列化
private static void serializeFlyPig() throws Exception {
FlyPig flyPig = new FlyPig();
flyPig.setName("riemann");
flyPig.setColor("black");
flyPig.setCar("audi");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("/home/cyp/flypig.txt")));
objectOutputStream.writeObject(flyPig);
System.out.println("flyPig对象序列化完成");
objectOutputStream.close();
}
//反序列化
private static FlyPig deserializeFlyPig() throws Exception {
ObjectInputStream objectinputStream = new ObjectInputStream(new FileInputStream(new File("/home/cyp/flypig.txt")));
FlyPig flyPig = (FlyPig)objectinputStream.readObject();
System.out.println("flypig对象反序列化完成");
return flyPig;
}
}
运行结果:
flyPig对象序列化完成
flypig对象反序列化完成
269 riemann black null
通过运行结果我们发现,通过transient修饰的属性car反序列化后的值为null,说明其不能被反序列化,但是静态变量AEG的值仍是269,难道它也被序列化了?当然不是,下面进行测试:
在定义的FlyPig对象的类中,把AEG的值由269改成26,现在,如果AEG被序列化了,那么序列化后AEG的值仍是269,反序列化后显示的值应该也是269,所以,这次我们只运行serializeTest类中的反序列化方法,可以在main方法中把序列化方法注释掉,如下所示:
public static void main(String[] args) throws Exception{
//serializeFlyPig();
FlyPig flyPig = deserializeFlyPig();
System.out.println(flyPig.getAGE()+ " " + flyPig.getName() + " " + flyPig.getColor() + " " + flyPig.getCar());
}
然后运行代码,运行结果为:
flypig对象反序列化完成
26 riemann black null
我们发现,AEG的值变成了26,说明static修饰的属性AEG并没有被序列化。
内容总结
以上是互联网集市为您收集整理的Java序列化全部内容,希望文章能够帮你解决Java序列化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。