目录
-
序列化概念
-
序列化就是一种处理对象流的机制。所谓对象流就是将对象的内容进行流化,将数据分解成字节流以便存储在文件中或在网络上传输。可以对流化后的对象进行读写操作,也可以将流化后的对象传输在网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
-
-
序列化可以分为两部分:序列化与反序列化
-
序列化:将数据分解为字节流,以便存储在文件中或在网络上传输。序列化由ObjectOutputStream的writerObject实现
-
反序列化:打开字节流并重构为对象。反序列化由ObjectInputStream的readObject实现
-
-
-
序列化实现的步骤
- 将需要实例化的类实现Serializable接口
- 使用一个输出流(例如:FileOutputSteam)来构造一个ObjectOutputStream对象
- 然后利用ObjectOutputStream对象的writeObject(Object obj)方法将指定的对象进行序列化,要恢复的话则使用输入流
- 关闭流对象
-
代码实例
- 需要被序列化的类
package IODemo;
import java.io.Serializable;
/**
* @author xxx
* @Description: 序列化之教师类
* @date 2018/11/15下午5:10
**/
public class Teacher implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private transient String course;
public Teacher() {
}
public Teacher(String name, int age, String course) {
this.name = name;
this.age = age;
this.course = course;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
", course='" + course + '\'' +
'}';
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
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;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
}
- 对对象进行序列化与反序列化
-
package IODemo; import java.io.*; /** * @author xxx * @Description: 序列化与反序列化 * @date 2018/11/15下午5:14 **/ public class SeriObject { public static void main(String[] args) { String address = "/Users/zyp/Downloads/test/test.txt"; seriz(address); fseriz(address); } // 将对象序列化并写入文件 public static void seriz(String address){ FileOutputStream fileOutputStream = null; ObjectOutputStream objectOutputStream = null; try { fileOutputStream = new FileOutputStream(address); objectOutputStream = new ObjectOutputStream(fileOutputStream); Teacher teacher = new Teacher("张云鹏",20,"数学"); objectOutputStream.writeObject(teacher); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { objectOutputStream.close(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } // 将文件中的数据读出来并反序列化 public static void fseriz(String address){ FileInputStream fileInputStream = null; ObjectInputStream objectInputStream = null; try { fileInputStream = new FileInputStream(address); objectInputStream = new ObjectInputStream(fileInputStream); Teacher teacher = (Teacher) objectInputStream.readObject(); System.out.println(teacher); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { objectInputStream.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }