博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java对象序列化/反序列化的注意事项(转)
阅读量:6848 次
发布时间:2019-06-26

本文共 1234 字,大约阅读时间需要 4 分钟。

Java对象序列化 

   对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中。JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了。而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下。 
   对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络传输,在网络的一端将对象序列化成字节流,经过网络传输到网络的另一端,可以从字节流重新还原为Java虚拟机中的运行状态中的对象。 
1.相关的接口 
      Java类中对象的序列化工作是通过ObjectOutputStream和ObjectInputStream来完成的。          
   

  1. ObjectOutputStream(OutputStream out);  
  2.     void writeObject(Object obj);//将指定的对象的非transient,非static属性,写入ObjectOutputStream  
  3.      
  4.     ObjectInputStream(InputStream in);  
  5.     Object readObject();//从指定的流中读取还原对象信息  

    只能使用readObject()|writeObject()方法对对象进行读写操作。除对象之外,Java中的基本类型和数组也可以被序列化,对于基本类型,可以使用readInt(),writeInt(), 
readDouble(),writeDouble()等类似的接口进行读写。 
2.Serializable接口  
    对于任何需要被序列化的对象,都必须要实现接口Serializable,它只是一个标识接口,本身没有任何成员,只是用来标识说明当前的实现类的对象可以被序列化. 
3.transient关键字 
  
    如果在类中的一些属性,希望在对象序列化过程中不被序列化,使用关键字transient标注修饰就可以.当对象被序列化时,标注为transient的成员属性将会自动跳过。 
  
4.Java序列化中需要注意: 
      (1).当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法,静态的成员变量(但不会出错)和transient标注的成员变量。 
     (2).如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存还原,而且会是递归的方式。 (做为成员变量的对象的类必须也实现Serializable接口)
     (3).如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。可以将这个引用标记transient,那么对象仍然可以序列化。

http://www.cnblogs.com/wangjiyuan/p/3487778.html

 

你可能感兴趣的文章
delphi 知道excel选中的单元格的行号
查看>>
Vue.js中data,props和computed数据
查看>>
软件不能用Surface Pro触控笔 微软这有解决办法
查看>>
contentsize ,ios 7和 ios7之前的 有点差别,
查看>>
Tomcat
查看>>
try catch 怎么写?
查看>>
iOS学习笔记(十五)——数据库操作(SQLite)
查看>>
Android spinner 样式及其使用详解
查看>>
ftps加密服务器
查看>>
[置顶] 批处理命令
查看>>
谈谈不换行空格
查看>>
ubuntu 13.04 nginx.conf 配置详解
查看>>
Android调用系统的打电话和发短信界面(1.将消息内容带过去2.实现群发)
查看>>
如何在内网安装compass
查看>>
TF-IDF理解及其Java实现
查看>>
使用升级版的 Bootstrap typeahead v1.2.2
查看>>
项目中自增长编码生成方法
查看>>
认清Linux中标准输入和标准输出的双重含义
查看>>
[家里蹲大学数学杂志]第270期张恭庆编《泛函分析讲义》2.5节以前的习题参考解答...
查看>>
Smack 广播
查看>>