版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lin857/article/details/73010788
1、什么是Java序列化和反序列化?
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
2、为什么要使用序列化和反序列化?
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
3.如何实现Java序列化与反序列化
ObjectOutputStream:表示对象输出流
ObjectInputStream:表示对象输入流
4.举例说明
//只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常。
package com.mytest.main;
import java.io.Serializable;
public class Student implements Serializable{
/**
* 不想将某属性序列化的话,可以用transient修饰
* 如下:private transient String as;
*/
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
//序列化方法
private static void setSerializable() {
Student student=new Student("落雨敏", 20);
try {
File file=new File("E:/Test/user.txt");
if(!file.exists()){
file.createNewFile();
}
//序列化过程
FileOutputStream os=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(student);
oos.flush();
oos.close();
os.close();
System.out.println("序列号成功");
}
catch (IOException e) {
e.printStackTrace();
}
}
//反序列化方法
private static void getSerializable() {
try {
File file=new File("E:/Test/user.txt");
if(!file.exists()){
System.out.println("没有发现文件");
return ;
}
//反序列化过程
FileInputStream is=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
Student student=(Student) ois.readObject();
ois.close();
is.close();
System.out.println("反序列:"+student);
}
catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}