一、序列化与反序列化概述
    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个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. html模板与json数据交互

    阅读这篇文章后,对html和json有很大的启发: http://www.zhangxinxu.com/wordpress/2012/09/javascript-html-json-template/ ...

  2. jq:zclip复制

    实例: <script type="text/javascript" src="js/jquery.js"></script> < ...

  3. WAF实现扫描器识别

    目前安全测试的软件越来越多,也越来越强大,越来越多的人成为[黑客],今天在网上看到一个文章说拦截wvs的扫描,勾起了我写这篇文章的欲望.   因为公司的三大业务之一就有一个云waf,每天拦截的日志里面 ...

  4. gdc skin

    https://www.gdcvault.com/play/1024410/Achieving-High-Quality-Low-Cost 这篇是教美术怎么用做地形那种方法 复用贴图 做skin的 做 ...

  5. VB6.0 中 碰到 提示rs对象关闭,不允许操作, 吃一堑长一智

    VB6.0 中 碰到 提示rs对象关闭,不允许操作,  吃一堑长一智 如果碰到 这个错误提示 则请检查 你执行的每一个语句中的数据类型,包括 如果有存储过程的话,还要检查 存储过程中每一个变量和数据表 ...

  6. 【云计算】OpenStack Horizon DashBoard定制化,完整实现前后台交互

    项目代码见GitHub:https://github.com/junneyang/openstack-customization-example 参考资料: Install and configure ...

  7. Hadoop 添加删除Slave

    Hadoop 添加删除Slave @(Hadoop) 在hdfs-site.xml文件中添加如下配置: <property> <name>dfs.hosts</name& ...

  8. 前端性能优化:使用Array.prototype.join代替字符串连接

    来源:GBin1.com 有一种非常简单的客户端优化方式,就是用Array.prototype.join代替原有的基本的字符连接的写法.在这个系列的第一篇中,我在代码中使用了基本字符连接: htmlS ...

  9. CF无法全屏怎么办

    方法1:把桌面的分辨率调成800X600,然后运行CF就全屏了,接着再退出游戏,把桌面重新调回原来的分辨率. 方法2:在运行中输入regedit.可以打开打开注册表编辑器,定位到HKEY_LOCAL_ ...

  10. linux中添加开机自启服务的方法

    往文件/etc/rc.d/rc.local中追加内容即可,如: /mongodb/start_mongoDB.sh