33. Java序列化中如果有些字段不想进行序列化,怎么办?

答:对于不想进行序列化的变量,使用transient关键字修饰。

transient关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法。

序列化与反序列化

  • Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。

序列化的作用

  • 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
  • Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里);二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

对象序列化前提

  • 只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常。

实现序列化与反序列化的方法

假定一个Student类,它的对象需要序列化,可以有如下三种方法:

  • 方法一:若Student类仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化

ObjectOutputStream采用默认的序列化方式,对Student对象的非transient的实例变量进行序列化。

ObjcetInputStream采用默认的反序列化方式,对Student对象的非transient的实例变量进行反序列化。

  • 方法二:若Student类仅仅实现了Serializable接口,并且还定义了readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out),则采用以下方式进行序列化与反序列化。

ObjectOutputStream调用Student对象的writeObject(ObjectOutputStream out)的方法进行序列化。

ObjectInputStream会调用Student对象的readObject(ObjectInputStream in)的方法进行反序列化。

  • 方法三:若Student类实现了Externalnalizable接口,且Student类必须实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,则按照以下方式进行序列化与反序列化。

ObjectOutputStream调用Student对象的writeExternal(ObjectOutput out))的方法进行序列化。

  1. http://www.importnew.com/17964.html
  2. https://blog.csdn.net/wangloveall/article/details/7992448/##1

最新文章

  1. 使用AJAX完成用户名是否存在异步校验
  2. 初识WEB:输入URL之后的故事【转】
  3. NOIP201103瑞士轮
  4. WP8.1 Study5:Data binding数据绑定
  5. windows常用运行命令收集(持续更新)
  6. 反向生成hbm.xml
  7. 北京汽车官网经销商信息抓取(解析html标签)
  8. (转)PHP中extract()函数的妙用
  9. javascript获取host
  10. read/load
  11. Cognos 图表用图片取代”没有数据显示”
  12. 开源 免费 java CMS - FreeCMS1.9 职位管理
  13. Hibernate的基础入门(一)
  14. Web Mining and Big Data 公开课学习笔记 ---lecture0
  15. PHP语言学习之php做图片上传功能
  16. mac 修改root密码
  17. Django中session的基础了解
  18. Jumpserver跳板机的搭建和部署
  19. SqlServer 2008的tempdb数据文件大小暴增处理
  20. js继承——扩展Object方式实现继承

热门文章

  1. leetcode 664. Strange Printer
  2. shell系统管理
  3. .gitignore 使用入门
  4. hihocoder 第二十五周 spfa 最短路
  5. POJ - 1470 Closest Common Ancestors(离线Tarjan算法)
  6. AC自动机简明教程
  7. 手把手VirtualBox虚拟机下安装rhel6.4 linux位系统详细文档
  8. CodeForces 723C Polycarp at the Radio (题意题+暴力)
  9. Go语言模拟文件断点续传以及多协程读取写入文件操作
  10. ODBC数据管理器 SqlServer实时数据同步到MySql