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. 对象序列化的介绍.......................... ...
随机推荐
- .net mvc笔记3_Understanding Razor Syntax
Understanding Razor Syntax MVC3新视图引擎的名字叫做Razor.ASP.NET视图引擎处理web页面,寻找包含在服务器端指令的特殊元素.正如我们前面已经提到的,标准的AS ...
- List<T>到XML的序列化与反序列化
原文 http://hi.baidu.com/shishengli1234/item/f0536f36335390c22f8ec24b Model.RESE_SCH sch1 = new Model. ...
- was配置oracle RAC集群的数据源
在WebSphere中配置配置Oracle RAC集群的数据源,假设Oracle RAC双击分别为 HOST1 与 HOST2 , 端口为1521 ,服务名为 orcldbservice,则配置的UR ...
- oracle rac ha
ha,仅只是在操作系统层面进行数据库的监控和管理,一般只针对单实例数据库使用.优点是管理方便,应用开发方便(方便了开发商):工程投入较小.缺点是,具有所有单实例数据库的缺点:如:容错能力差,续航能力差 ...
- uber奖励和账单详解
为了让各位车主轻松理解奖励政策和账单明细的核算方法,我们特意制作#奖励详解#的专题文章,保证您五分钟内掌握看懂账单的全部要领和诀窍. 第一部分:收入说明 看到收入说明的账单是不是有些晕呢,来来,我们一 ...
- Java图形化界面设计——容器(JFrame)
Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...
- 通过jstack定位在线执行java系统故障_案例1
问题描写叙述: 在一个在线执行的java web系统中,会定时执行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务仅仅打印了開始进入FT ...
- API和DLL
API API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用 ...
- django datetime format 日期格式化
django datetime format 日期格式化 www.jx-lab.com python 中 date,datetime,time对象都支持strftime(format)方法,但有一些区 ...
- IOS实现UIButton图文混排、自定义按钮按下和正常状态下不同的背景颜色、根据文字长度自定义UIButton长度
在一些项目中,我们需要自定义自己的UIButton,使Button上面同时具有图片和文字描述,实现自定义UIButton的图文混排. 首先我们需要定义一个继承自UIButton的类,同时实现自己的in ...