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()); 

  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 序列化
反序列化
kryo 序列化 示例、实现序列化接口的作用、java实现序列化、实现序列化接口、java实现序列化的方法,以便于您获取更多的相关知识。

时间: 2024-12-31 14:35:23

Java实现序列化与反序列化的简单示例_java的相关文章

使用Java实现希尔排序算法的简单示例_java

简介希尔排序(缩小增量法) 属于插入类排序,由Shell提出,希尔排序对直接插入排序进行了简单的改进:它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度地移动,当这些数据项排过一趟序之后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去,进行这些排序时的数据项之间的间隔被称为增量,习惯上用字母h来表示这个增量. 常用的h序列由Knuth提出,该序列从1开始,通过如下公式产生: h = 3 * h +1 反过来程序需要反向计算h序列,应该使用 h=(h-

Java的序列化和反序列化

1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态, 也就是实例变量,不是方法, 并且可以把保存的对象状态再读出来. 虽然你可以用你自己的各种各样的方法来保存object states, 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化. 2.什么情况下需要序列化 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候:  当你想用套接字在网络上传送对象的时候:  当你想通过RMI传输对象的时候:  3.一个例子 序列化需要实现Serializable

java求100之内的素数(质数)简单示例_java

质数又称素数.一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数:否则称为合数.根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积:而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的.下面是一个java求100之内的素数简单示例 复制代码 代码如下: public class test {  public static void main(String[] args) {  int i,n,k=0;     for (n = 3;

java 的序列化和反序列化的问题

引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写.然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识. 回页首 文章结构 本

java序列化与反序列化操作实例分析_java

本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. 示例代码: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.i

理解Java的序列化与反序列化_java

文章主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么自定义序列化策略 自定义的序列化策略是如何被调用的 ArrayList对序列化的实现有什么好处 一.Java对象的序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存

JAVA按字节读取文件的简单实例_java

JAVA的IO流一直都是我比较头疼的部分(我没有系统学过JAVA,一般需要实现什么功能再去看文档). 最近遇到一个需求:一个字节一个字节地读取一个文件.网上很多方法,代码一大堆.我在这里和大家分享一个简单的办法(至少对我的需求是有效的). File file= new File(fileName); //filename为 文件目录,请自行设置 InputStream in= null; byte[] bytes= null; in = new FileInputStream(file); //

Java用GDAL读写shapefile的方法示例_java

GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它还有一系列命令行工具来进行数据转换和处理. GDAL官方网址:http://www.gdal.org/,它能支持当前流行的各种地图数据格式,包括栅格和矢量地图,具体参考官方网站.该库使用C/C++开发,在Java中使用需要自己编译,具体编译过程这里就不说了,下面来看看本文的主要内容吧. Java使用G

java对象序列化与反序列化的默认格式和json格式使用示例_java

默认格式 复制代码 代码如下: public class MyClass implements Serializable{...} 序列化: 复制代码 代码如下: ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(outputPath)); output.writeObject(myObject); 反序列化: 复制代码 代码如下: ObjectInputStream input = new Objec