Java实现序列化与反序列化的简单示例

 更新时间:2016年05月12日 08:57:46   作者:王路情  
序列化与反序列化是指Java对象与字节序列的相互转换,一般在保存或传输字节序列的时候会用到,下面有两个Java实现序列化与反序列化的简单示例,不过还是先来看看序列和反序列化的具体概念:

1.Java序列化与反序列化

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。

2.为什么需要序列化与反序列化

我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络
传送;另一方面,接收方需要从字节序列中恢复出Java对象。

当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

3.示例:
(1)序列化反序列化文件:

import java.io.*; 
 
@SuppressWarnings("serial") 
class Person implements Serializable { 
 
  public Person(String name, String sex, int age, int height) { 
    this.name = name; 
    this.sex = sex; 
    this.age = age; 
    this.height = height; 
  } 
 
  public String toString() { 
    return "|" + this.name + "|" + this.sex + "|" + this.age + "|" 
        + this.height + "|"; 
  } 
 
  public String name; 
  public String sex; 
  public int age; 
  public int height; 
} 
 
public class SerialTest { 
  public static void main(String[] args) throws FileNotFoundException, 
      IOException, ClassNotFoundException { 
 
    Person p = new Person("Jim", "male", 28, 194); 
 
    // 开始序列化 
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( 
        new File("myTest.txt"))); 
    oos.writeObject(p); 
 
    // 反序列化 
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream( 
        new File("myTest.txt"))); 
    Person p1 = (Person) ois.readObject(); 
 
    System.out.println(p1.toString()); 
  } 
} 


(2)XML反序列化成class:

import java.io.*; 
import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.xml.DomDriver; 
 
 
@SuppressWarnings("serial") 
class RoadInfo implements Serializable { 
 
  public int id; 
  public long MDN; 
  public String NAME; 
  public double LNG; 
  public double LAT; 
  public String ICON; 
 
} 
 
@SuppressWarnings("serial") 
class table_list implements Serializable { 
 
  public String toString() { 
    StringBuffer sb = new StringBuffer(); 
    for (RoadInfo r : sequence) { 
      sb.append("|"); 
      sb.append(r.id); 
      sb.append("|"); 
      sb.append(r.MDN); 
      sb.append("|"); 
      sb.append(r.NAME); 
      sb.append("|"); 
      sb.append(r.LNG); 
      sb.append("|"); 
      sb.append(r.LAT); 
      sb.append("|"); 
      sb.append(r.ICON); 
      sb.append("|\n"); 
    } 
    return sb.toString(); 
  } 
 
  public table_list(int count) { 
    sequence = new RoadInfo[count]; 
    for (int i = 0; i < count; i++) { 
      sequence[i] = new RoadInfo(); 
    } 
  } 
 
  public RoadInfo[] sequence; 
} 
 
public class XMLTest { 
 
  /** 
   * @param args 
   */ 
  public static void main(String[] args) throws Exception { 
    // TODO Auto-generated method stub 
    StringBuffer sb = new StringBuffer(); 
    BufferedReader reader = new BufferedReader(new FileReader(new File( 
        "friend_msg.xml"))); 
    while (true) { 
      String s = reader.readLine();// 读一行 
      if (s == null) { 
        break; 
      } 
      sb.append(s); 
    } 
 
    XStream xs = new XStream(new DomDriver()); 
    table_list db = (table_list) xs.fromXML(sb.toString()); 
    System.out.println(db.toString()); 
 
  } 
} 

相关文章

  • Spring Cloud Ribbon的踩坑记录与原理详析

    Spring Cloud Ribbon的踩坑记录与原理详析

    这篇文章主要给大家介绍了关于Spring Cloud Ribbon踩坑记录与原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Java多线程编程中使用DateFormat类

    Java多线程编程中使用DateFormat类

    这篇文章主要介绍了Java多线程编程中使用DateFormat类,文中介绍了三种相关的并发使用方法,需要的朋友可以参考下
    2015-07-07
  • java上乘武功入门--反射

    java上乘武功入门--反射

    反射是Java的一种机制,一般也叫做反射机制,本文会讲反射机制是什么和怎么使用,喜欢的朋友可以观看一下,希望能给你带来帮助
    2021-07-07
  • Spring Security 中细化权限粒度的方法

    Spring Security 中细化权限粒度的方法

    这篇文章主要介绍了Spring Security 中细化权限粒度的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • idea中springboot整合mybatis找不到mapper接口的原因分析

    idea中springboot整合mybatis找不到mapper接口的原因分析

    这篇文章主要介绍了idea中springboot整合mybatis找不到mapper接口的原因分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • SpringMvc3+extjs4实现上传与下载功能

    SpringMvc3+extjs4实现上传与下载功能

    这篇文章主要为大家详细介绍了SpringMvc3+extjs4实现上传与下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java程序的逻辑控制和方法详解

    Java程序的逻辑控制和方法详解

    这篇文章主要介绍了Java程序的逻辑控制和方法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

    Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

    这篇文章主要介绍了Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例,非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • maven创建spark项目的pom.xml文件配置demo

    maven创建spark项目的pom.xml文件配置demo

    这篇文章主要为大家介绍了maven创建spark项目的pom.xml文件配置demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 深入浅出Java中重试机制的多种方式

    深入浅出Java中重试机制的多种方式

    重试机制在分布式系统中,或者调用外部接口中,都是十分重要的。重试机制可以保护系统减少因网络波动、依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制。本文就来和大家聊聊Java中重试机制的多种方式
    2023-03-03

最新评论