Java之对象序列化和反序列化
一、对象序列化和反序列化存在的意义:
当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息。并在下次程序运行的时候使用该信息。
二、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之对象序列化和反序列化的更多相关文章
- Java Io 对象序列化和反序列化
Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1. 对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2. 序列化流ObjectOut ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- Java对象序列化与反序列化一 JSON
Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student { private String nam ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- Java对象序列化和反序列化的工具方法
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Java对象序列化与反序列化
对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存 ...
- java中的序列化与反序列化,还包括将多个对象序列化到一个文件中
package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
- C#对象序列化与反序列化
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...
随机推荐
- 【原创】JPEG图像密写研究(二) 哈夫曼树的建立
[原创]记录自己研究的过程,仅供参考,欢迎讨论... 在根据JPEG图像文件结构读取完文件后,提取出其中DHT段,利用其中内容建立哈夫曼树,便于之后译码工作.这里需要注意的是文件中的哈夫曼表数量不固定 ...
- STL"源码"剖析
STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略 ...
- SQL Server 排名函数实现
在SQL Server 中有四大排名函数分别是: 1.row_number() 2.ntile() 3.rank() 4.dense_rank() -------------------------- ...
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- 修改win7注册表发挥大容量内存优势
现在请打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control \Session Manager\MomoryManagement ...
- 工具类_java 数字转化为汉字大写
public class Num2Rmb { private String[] hanArr = { "零", "壹", "贰", &quo ...
- cocos2d-x-3.1 Text Labels(官方正式译文)
介绍 cocos2d支持(true type字体)标签,和纹理地图集标签. LabelTTF 标签的优缺点: 全部 TTF 字体的长处: 随意大小,支持调整字距. 易于使用. 不须要外部编辑器. 创建 ...
- BootStrap 智能表单系列 五 表单依赖插件处理
这一章比较简单哦,主要就是生产表单元素后的一些后续处理操作,比如日期插件的渲染.一些autocomplete的处理等,在回调里面处理就可以了, demo: $("input.date-pic ...
- IS-A 和 HAS-A
IS-A关系 IS-A就是说:一个对象是另一个对象的一个分类. 下面是使用关键字extends实现继承. public class Animal{ } public class Mammal exte ...
- Git远程仓库的使用(三)
1)git remote add : 添加远程仓库 git remote add origin git@github.com:用户名.仓库名.git 2) git push –u origin mas ...