Java序列化与反序列化
1、什么是序列化反序列化
java程序代码序列化是分割程序对象,有字节序列。反序列化就是字节程序重新组装成java对象的过程。
2、为什么需要序列化与反序列化
我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
package xuliehua;
/**
* 测试StudentTest01类
*/
import java.io.Serializable;
//方法需要实现Serializable这个接口
//生产默认序列号
public class StudentTest01 implements Serializable {
//一般为使后期改代码方便会自定义序列号
private static final long serialVersionUID = 15703896520L;
private int age ;
// private Transient String name ; 游离的
// private String name ;
public StudentTest01() {
}
public StudentTest01(int age) {
this.age = age;
// this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// public String getName() {
// return name;
// }
// public void setName(String name) {
// this.name = name;
// }
// @Override
// public String toString() {
// return "StudentTest01{" +
// "age=" + age +
// ", name='" + name + '\'' +
// '}';
// }
@Override
public String toString() {
return "StudentTest01{" +
"age=" + age +
'}';
}
}
package xuliehua;
/**
* StudentTest类 序列化过程
*/
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class StudentTest02{
public static void main(String[] args) throws Exception {
StudentTest01 s = new StudentTest01(21);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("new2"));
//对象序列化保存在new2中
o.writeObject(s);
o.close();
o.flush();
}
}
package xuliehua;
/**
* StudentTest反序列化过程
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class StudentTest03 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream o2 = new ObjectInputStream(new FileInputStream("new2"));
//反序列化 实现对象程序
Object s1 = o2.readObject();
System.out.println(s1);
o2.close();
}
}