打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
对象的序列化与反序列化
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();
 }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java serializable 序列化概述
Serializable接口
深入分析Java的序列化与反序列化
序列化和反序列化的底层实现原理是什么?
Java对象的序列化和反序列化实践
Java序列化与反序列化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服