JAVA基础之序列化与反序列化

Posted fxh1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA基础之序列化与反序列化相关的知识,希望对你有一定的参考价值。

序列化和反序列化:

  把对象转化为字节序列的过程称为序列化;

  把字节序列恢复为对象的过程称为对象的反序列化;

方法:

  Java.io.ObjectOutputStream代表对象的输出流,writeObject(Object obj)方法对参数对象进行序列化,把得到的字节序列写到一个目标输出流中。

  Java.io.ObjectInputStream代表对象的输入流,readObject()方法可以从一个源输入流中读取字节序列,并转化为一个对象,将其返回。

  只有实现Serializable和Externalizable接口的类的对象才能被序列化。

  Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。
  对象序列化包括如下步骤:
  1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
  2) 通过对象输出流的writeObject()方法写对象。
  对象反序列化的步骤如下:
  1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
  2) 通过对象输入流的readObject()方法读取对象。

实例:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 import java.io.Serializable;
 9 import java.text.MessageFormat;
10 
11 
12 class Person implements Serializable{
13     private int age;
14     public int getAge() {
15         return age;
16     }
17     public void setAge(int age) {
18         this.age = age;
19     }
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     private String name;
27 }
28 public class test {
29     public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException
30     {
31         SerialiablePerson();
32         Person p=DeserializePerson();
33          System.out.println(MessageFormat.format("name={0},age={1}",p.getName(),p.getAge()));    
34     }
      //反序列化的过程,从字节序列文件读出并返回
35 public static Person DeserializePerson() throws FileNotFoundException, IOException, ClassNotFoundException{ 36 ObjectInputStream in=new ObjectInputStream(new FileInputStream(new File("E://person.txt"))); 37 Person p=(Person)in.readObject(); 38 return p; 39 }
     //序列化的过程,将字节存到E://Person.txt中
40 public static void SerialiablePerson() throws FileNotFoundException, IOException { 41 Person p=new Person(); 42 p.setAge(15); 43 p.setName("姓氏"); 44 45 ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(new File("E://Person.txt"))); 46 out.writeObject(p); 47 out.close(); 48 } 49 50 }

 









以上是关于JAVA基础之序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java反序列化漏洞——反射与反序列化基础

Java基础序列化与反序列化深入分析

Pyhon基础知识之Json序列化与反序列化

Java基础IO流序列化与反序列化

Java基础系列8:Java的序列化与反序列化

java编程基础-序列化与反序列化