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

    BOOL CPrintView::GetPageSize(CSize &nRetVal)  // CPrintView 是自己创建的类       {          PRINTDLG FA ...

  2. [Java基础] Java线程复习笔记

    先说说线程和进程,现代操作系统几乎无一例外地采用进程的概念,进程之间基本上可以认为是相互独立的,共享的资源非常少.线程可以认为是轻量级的进 程,充分地利用线程可以使得同一个进程中执行多种任务.Java ...

  3. nginxtomca负载均衡

    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...

  4. iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem

    菜单控制器和菜单项:弹出自定义的菜单栏窗口 提示: 1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES2. Menu所处的View必须 ...

  5. Md5Hash的测试

    import org.apache.shiro.crypto.hash.Md5Hash; public static void main(String[] args) { /** * source 要 ...

  6. Servlet3.0使用@WebServlet注解配置问题记录

    文档说@WebServlet的配置属性都是可选的,不是必需的. 经实践,将一个Servlet配置成load-on-startup的Servlet时,若只添加loadOnStartup属性,该Servl ...

  7. taglib.jsp

    <%@ taglib prefix="shiro" uri="/WEB-INF/tlds/shiros.tld" %><%@ taglib p ...

  8. zabbix 配置外部邮件server发送邮件报警

    一.安装配置msmtp 1.下载msmtp wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.30.tar.bz2?big_mirror=0 ...

  9. 【原创】Android自定义适配器的使用方法

    比如说我们已经得到了数据,想在一个listview或者在其他的控件中显示的,并且我们显示想要自己设计样式来显示的话就要用到自定义适配器了,下面让我们结合代码讲一下具体的使用方法: 代码会有注释的哦: ...

  10. Unity3D入门基础之游戏对象 (GameObject) 和组件 (Component) 的关系

    原文出处:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheGameObject-ComponentRela ...