一、序列化与反序列化概述
    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 
  把Java对象转换为字节序列的过程称为对象的序列化
 
  把字节序列恢复为Java对象的过程称为对象的反序列化
二、序列化的必要性
   
 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。
 
    对象的序列化主要有两种用途:  
   1)
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;     2)
在网络上传送对象的字节序列。
 
三、序列化与反序列化步骤
 
   
 java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object
obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
 
  java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
 
  只有实现了SerializableExternalizable接口的类的对象才能被序列化。Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式
 
  对象序列化包括如下步骤:
 
  1)
创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
 
  2)
通过对象输出流的writeObject()方法写对象。
 
  对象反序列化的步骤如下:
 
  1)
创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
 
  2)
通过对象输入流的readObject()方法读取对象。
 
  下面让我们来看一个对应的例子,类的内容如下:
 
public class ObjectSaver {
 
public static void main(String[] args) throws
Exception {
 ObjectOutputStream out = new
ObjectOutputStream
(new
FileOutputStream("D:""objectFile.obj"));
 
 //序列化对象
 
 Customer customer = new Customer("中国梦",
24);
 out.writeObject("你好!");
 out.writeObject(new
Date());
 out.writeObject(customer);
 out.writeInt(123);
//写入基本类型数据
 out.close();
 //反序列化对象
 
 ObjectInputStream in = new
ObjectInputStream
(new
FileInputStream("D:""objectFile.obj"));
 
 System.out.println("obj1=" + (String)
in.readObject());
 System.out.println("obj2=" + (Date)
in.readObject());
 Customer obj3 = (Customer)
in.readObject();
 System.out.println("obj3=" +
obj3);
 int obj4 = in.readInt();
 System.out.println("obj4=" +
obj4);
 in.close();
}
}
 
class Customer implements Serializable
{
private String name;
private int age;
public Customer(String name, int age)
{
this.name = name;
this.age = age;
}
 
public String toString() {
return "name=" + name + ", age=" +
age;
}
}
输出结果如下:
 
     
     
obj1=你好!
 
 
     
      obj2=Sat
Sep 15 22:02:21 CST 2007
 
 
     
     
obj3=name=中国梦, age=24
 
 
     
     
obj4=123
 

Java序列化与反序列化学习(一)的更多相关文章

  1. Java序列化与反序列化学习(三):序列化机制与原理

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的 过程.Java序列化API提供 ...

  2. Java序列化与反序列化学习(二):序列化接口说明

    一.序列化类实现Serializable接口 Serializable接口没有方法,更像是个标记.有了这个标记的Class就能被序列化机制处理. ObjectOutputStream只能对Serial ...

  3. (记录)Jedis存放对象和读取对象--Java序列化与反序列化

    一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

  4. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  5. [转] Java序列化与反序列化

    原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...

  6. Java序列化与反序列化(Serializable)

    Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...

  7. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

  8. JAVA序列化和反序列化XML

    package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.Bu ...

  9. Java序列化与反序列化(实践)

    Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上 ...

随机推荐

  1. Lua学习之类型与值

    Lua是一种动态语言,在语言中没有类型定义的语法. 在lua中有8中基本的类型: 1.nil(空) 2.boolean 3.number(数字) 4.string(字符串) 5.userdata(自定 ...

  2. select标签中的选项分组

    select标签中的选项分组 <select name="showtimes"> <optgroup label="下午一点"> < ...

  3. IT博客汇

    做了个博客聚合网站,收集了一堆IT牛人的博客RSS订阅,每天自动更新. 一旦关注的作者发表了新的博客,第一时间就能看到. 地址在这儿,欢迎参观: http://www.wrox.cn

  4. JAVA的面向对象编程

    JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...

  5. vue - webpack.prod.conf.js

    描述:webpack打包项目时的配置文件. 命令:yarn run build 或 npm run build 打包后,生成的文件在dist文件夹下 打包后,要在服务器环境下运行!!! 关于怎样运行, ...

  6. jQuery-mobile 学习笔记之三(事件监听)

    续上 触摸事件 - 当用户触摸屏幕时触发(敲击和滑动) 滚动事件 - 当上下滚动时触发 方向事件 - 当设备垂直或水平旋转时触发 页面事件 - 当页面被显示.隐藏.创建.载入以及/或卸载时触发 一.初 ...

  7. 【java】对数据库操作的那些事(包含数据库中的预处理)

    一.连接问题 前面刚介绍了怎么连接数据库,也写了对应的模板.可是它的可维护性很差.那么怎么解决问题呢? 首先写一个配置文件jdbc.properties <span style="fo ...

  8. 2 自己编写:AppDelegate,CCApplication,CCApplicationProtocol

    1 CCApplicationProtocol.h /* * CCApplicationProtocol.h * *  Created on: 2014年10月19日 *      Author: t ...

  9. Android蓝牙开发

    Android蓝牙开发 近期做蓝牙小车,须要Android端来控制小车的运动.以此文记录开发过程. 使用HC-06无线蓝牙串口透传模块.对于其它的蓝牙设备本文相同适用. 蓝牙开发的流程: 获取本地蓝牙 ...

  10. 【Linux】查询文件中指定字符串的记录

    语法 cat 文件 |grep 查询字符串 例如现在有文件file.dat,文件中内容如下: zhangsan Lisi wangwu123 wangwu890 zhangsan28290 现在想从文 ...