1、什么是序列化?为什么要用序列化?

  序列化就是将对象状态转换为可保持或传输的格式的过程。与序列化相对的就是反序列化,他将流转换成对象。这两个过程结合起来,可以轻松地存储和传输数据。

注意:对象序列化

(1)、在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。

(2)、要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化;

(3)、使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量;

(4)、除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。

2、怎么实现序列化?

  要序列化的类,要实现Serializable接口,而这个接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

注意:

在序列化的过程中,有些数据字段我们不想将其序列化,对于此类字段我们只需要在定义时给它加上transient关键字即可,对于transient字段序列化机制会跳过不会将其写入文件,当然也不可被恢复。但有时我们想将某一字段序列化,但它在SDK中的定义却是不可序列化的类型,这样的话我们也必须把他标注为transient,可是不能写入又怎么恢复呢?好在序列化机制为包含这种特殊问题的类提供了如下的方法定义:
private void readObject(ObjectInputStream in) throws
IOException, ClassNotFoundException;
private void writeObject(ObjectOutputStream out) throws
IOException;
(注:这些方法定义时必须是私有的,因为不需要你显示调用,序列化机制会自动调用的)

3、让已经取消序列化的字段重新再次序列化,有两种方式:

  【(取消序列化,那么该字段就不会显示其有的值)】

  【在字段前面加上transient关键字,那么该字段就会取消序列化】----取消序列化

  法1:将关键字transient去掉;

  法2:在实体类中添加两个方法:writeObject()与readObject()

  

最新文章

  1. git 命令操作
  2. java servlet手机app访问接口(三)高德地图云存储及检索
  3. iOS中定时器的使用
  4. 原始套接字(SOCK_RAW)
  5. API - .add()
  6. Linux/Unix shell 监控Oracle监听器(monitor listener)
  7. bzoj 3757 苹果树(树上莫队算法)
  8. mysqldump备份7
  9. rdesktop命令连接Win7远程桌面
  10. mac下brew install 报错
  11. Ring3句柄表的枚举
  12. 多线程实现之Java
  13. c指针存放的是常量的地址
  14. react-redux异步数据操作
  15. pyhdfs安装
  16. gentoo usb serial ch340 16进制读写
  17. Android开发工程师文集-layout_weight讲解
  18. SQL Server 2005详细安装过程及配置
  19. Spring的一个入门例子
  20. ceph mon更换ip地址

热门文章

  1. C# 中File和FileStream的用法
  2. js的validate插件异步效验
  3. 【新手向】一个超简单的基于jQuery ajax的天气预报Demo
  4. Rsync安装部署
  5. C++ CMake 入门实战[转载]
  6. Taro -- 微信小程序登录
  7. intel vtune 介绍、安装和使用
  8. Memcache--02 源码安装nginx,php
  9. java通过图片URL下载图片
  10. php 调用远程url