分享

对象的序列化与反序列化

 奋斗小青年lh 2015-09-04
Java对象序列化

  当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

概念

  序列化:把Java对象转换为字节序列的过程。
  反序列化:把字节序列恢复为Java对象的过程。

序列化API

  java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。只有实现了Serializable接口的类的对象才能被序列化。

  java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。


代码实例:
Person.java
import java.io.Serializable;
public class Person implements Serializable{
 private static final long serialVersionUID = 1443686589302784335L;
 //对象序列化操作
 //1、要实现对象序列化操作,需要让Java中的类实现Serrializable接口
 //2、利用ObjectOutputStream类进行对象序列化操作
 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Person(String name) {
  this.name = name;
 }
}


TestObjectOutputStream.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class TestObjectOutputStream {
 //读取对象的顺序与写入时的顺序要一致。
 public void oper(){
  ObjectOutputStream oos = null;
  try {
   oos = new ObjectOutputStream(new FileOutputStream("d:\\object.txt"));
   ArrayList<Person> list = new ArrayList<Person>(); //实例多个对象的时候用list或者数组实现
   Person p = new Person("zhangsan");
   Person p2 = new Person("lisi");
   Person p3 = new Person("wangwu");
   list.add(p);
   list.add(p2);
   list.add(p3);
   oos.writeObject(list);
   oos.writeObject("123"); //序列化String对象
   oos.close();
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
 }
 public void input(){
  ObjectInputStream ois = null;
  try {
   ois = new ObjectInputStream(new FileInputStream("d:\\object.txt"));
   ArrayList<Person> list = (ArrayList<Person>) ois.readObject(); //对象读取顺序与实例化顺序一致
   for(Person p:list){
    System.out.println(p.getName());
   }
   System.out.println((String)ois.readObject());
   ois.close();
  } catch (Exception e) {

   e.printStackTrace();
  }
 }
 public static void main(String[] args) {
  TestObjectOutputStream t = new TestObjectOutputStream();
  t.oper();
  t.input();
 }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多