一、序列化与反序列化概述
    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个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. 【Thumbnailator】java 使用Thumbnailator实现等比例缩放图片,旋转图片等【转载】

    Thumbnailator概述:     Thumbnailator是与Java界面流畅的缩略图生成库.它简化了通过提供一个API允许精细的缩略图生成调整生产从现有的图像文件的缩略图和图像对象的过程, ...

  2. pycharm的插件pylint报错:java.lang.Throwable: Write-unsafe context! Model changes are allowed from write-safe contexts only. Please ensure you're using invokeLater/invokeAndWait with a correct modality stat

    java.lang.Throwable: Write-unsafe context! Model changes are allowed from write-safe contexts only. ...

  3. shell 脚本中执行mysql语句

    通过hash建表之后,表的数据量巨大2048,那怎么去验证表是否建成功呢? 逻辑生成表名这部分就不写了.只要能建表成功,这部分的脚本肯定是有的.那么怎么在shell中执行selec查询并返回呢 只要在 ...

  4. Linux中文乱码问题终极解决方法

    方法一: 修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030该文件在用户目录下,对于其他用户,也必须相应修改该文件. 使用该方法时putty能显示中 ...

  5. Ubuntu中Git服务器搭建

    git服务器搭建过程 参考网上资料搭建git服务器过程记录 如下: 需求 硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到. 软件需求:git-core, gitosis, ...

  6. oracle 10g函数大全--数值型函数

    ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 [示例] select abs(100),abs(-100) from dual; sign(x) [功能]返回x的正负值 ...

  7. unity linear space时 photoshop blend的正确设置

    gamma correction的dcc设置 ps在线性空间下工作 blend的时候颜色设置 勾选用灰度系数混合rgb 1.0 这样就是在线性空间下工作了 这样素材在数学上是正确的 r8g8b8a8格 ...

  8. yaha分词

    yaha分词:https://github.com/jannson/yaha

  9. mybatis paramType String Error

    我这么写的 <select id="getHotPlayersByDate" parameterType="java.lang.String" resul ...

  10. Android - Animation(二)

    Android - Animation(一) 一文总结了Android中的补间动画(View Animation/Tween Animation)和帧动画(Drawable Animation/Fra ...