Java之对象序列化和反序列化
2015-11-23 11:15
561 查看
一、对象序列化和反序列化存在的意义:
当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息。并在下次程序运行的时候使用该信息。
二、Java如何序列化和反序列化
Java对象的序列化是将那些实现Serializable接口的对象转化成一个字节序列。并在以后将该字节序列完全恢复成对象。该过程可以通过网络进行,这也是序列化机制能够自动弥补不同
操作系统之间的差异:在windows平台上序列化,通过网络传输给Linux系统,进行重新组装。
三、序列化IO流:
涉及到信息的保存机制就一定与IO流有关,在序列化一个对象时,首先创建OutputStream,然后将其封装到ObjectOutputStream,这是调用writeOject()就可以序列化对象。反序列化是将一个InputStream对象封装到ObjectInputStream中,将字节序列还原为对象。(还原过程中不会调用任何的构造器)
对象序列化特别聪明的地方就是能够追踪对象包含的所有的引用
四、参考代码:
序列化:
反序列化:
五:序化化的问题:
我们进行序列化时。可能不希望将一些敏感的内容序列化,如:密码!!!
这是我们可以使用transient的关键字进行标记,用来防止敏感对象被序列化。同时,还有另外的一种方法用来进行该操作:Externalizable接口
六、Externalizable接口
Externalizable接口继承了Serializiable接口,同时添加了两个方法:writeExernal()和readExternal()接口,该方法在序列化和反序列化的时候被自动调用
Externalizable接口与Serializable接口不同,该接口会调用所有的默认构造器,然后调用readExternal();
当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息。并在下次程序运行的时候使用该信息。
二、Java如何序列化和反序列化
Java对象的序列化是将那些实现Serializable接口的对象转化成一个字节序列。并在以后将该字节序列完全恢复成对象。该过程可以通过网络进行,这也是序列化机制能够自动弥补不同
操作系统之间的差异:在windows平台上序列化,通过网络传输给Linux系统,进行重新组装。
三、序列化IO流:
涉及到信息的保存机制就一定与IO流有关,在序列化一个对象时,首先创建OutputStream,然后将其封装到ObjectOutputStream,这是调用writeOject()就可以序列化对象。反序列化是将一个InputStream对象封装到ObjectInputStream中,将字节序列还原为对象。(还原过程中不会调用任何的构造器)
对象序列化特别聪明的地方就是能够追踪对象包含的所有的引用
四、参考代码:
序列化:
public byte[] getByteFromObject(Object obj) { ByteArrayOutputStream output = null; ObjectOutputStream oop = null; try { output = new ByteArrayOutputStream(); oop = new ObjectOutputStream(output); oop.writeObject(obj); } catch (IOException e) { e.printStackTrace(); } finally { close(oop); close(output); } return output.toByteArray(); }
反序列化:
public Object getObjectFromByte(byte[] bytes) { ByteArrayInputStream bis = null; ObjectInputStream ois = null; Object object = null; try { bis = new ByteArrayInputStream(bytes); ois = new ObjectInputStream(bis); object = ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { close(ois); close(bis); } return object; }
五:序化化的问题:
我们进行序列化时。可能不希望将一些敏感的内容序列化,如:密码!!!
这是我们可以使用transient的关键字进行标记,用来防止敏感对象被序列化。同时,还有另外的一种方法用来进行该操作:Externalizable接口
六、Externalizable接口
Externalizable接口继承了Serializiable接口,同时添加了两个方法:writeExernal()和readExternal()接口,该方法在序列化和反序列化的时候被自动调用
Externalizable接口与Serializable接口不同,该接口会调用所有的默认构造器,然后调用readExternal();
相关文章推荐
- 【Java EE 学习 68】【单点登录】【两种单点登录类型:SSO/CAS、相同一级域名的SSO】
- Spring源码学习(三)DispatcherServlet与初始化主线(转)
- JAVA设计模式之单例模式
- 50个Java精品源码免积分下载
- 64位Win 7 下eclipse的svn插件找不到 javaHL
- Hibernate延迟加载机制
- java从字符串中提取数字
- 关于SpringMVC下无法引用外部的js,css文件错误
- java.util.ArrayList在foreach循环遍历时删除元素的问题
- java 获取当前日期 分析当前日期星期几
- SwingWork + 线程池 +JTable +java写入中文乱码-- 一个swing的小应用
- java的重载和重写
- Spring注解 @Resource和@Autowired
- eclipse的debug模式经常自动跳到TheadPoolExecutor的断点
- Spring MVC: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet
- java 锁讲解
- 关于Spring中的<context:annotation-config/>配置
- Java File 类的文件名和路径相关函数
- spring 配置文件的相互引用问题
- JAVA 相关技术文章链接