Java 序列化以及反序列化

来源:互联网 发布:linux expec参数怎么用 编辑:程序博客网 时间:2024/06/05 16:30

今天看了Java编程思想序列化的那一节,明白了Java中序列化的究竟是个什么事情,主要用来做什么,相对于其他具有相同功能的操作有什么不同。

现在就来总结一下。

名词介绍:何为序列化与反序列化。我们知道但我们创建一个对象时,一旦程序终止之后,这个对象就不会继续存在了。但是存在某些情况下,在

程序不运行的情况下,仍然能够保存这个对象的信息,这样在程序下次运行时,该对象将被重建并且用于与上次运行时相同的信息。我们将这个对

象保存下来的过程就称为序列化,反之将这个对象进行重建并获取相同的信息的过程就称之为反序列化。

Java对象序列化就是通过Serializable接口将对象转换成字节序列然后保存起来,然后读取这个字节序列并完全恢复为原来的对象。它弥补了不同操

作系统之间的差异,能够在不同的操作系统之间进行序列化然后反序列化。它是一个轻量级的持久性。为什么称之为轻量级,是因为在Java中没有

相对应的关键字来简单定义一个序列化对象,必须显示的进行序列化和反序列化。

作用:Java中加入序列化的概念主要是为了支持两种主要特性,1、java远程方法调用(Remote Method Invocation) 2、在Java Bean中保存状态的

配置信息。在android中的框架层也用到了Java的序列化特性,如:Activity之间的数据传递就可以通过序列化对象来进行传递,aidl数据传递等等

但是android更建议使用Parcelable,因为在android中Parcelable比Serializable效率更高,内存占用更小。具体可以参考下面这篇博文:

http://www.cnblogs.com/fwycmengsoft/archive/2011/11/10/2244459.html。

具体使用方式:

一 实现Serializable接口

public class MyData implements Serializable{private int num;public MyData(int num){this.num = num;}public String getNum(){return Integer.toString(num);}}

二、序列化以及反序列化

public class MyTest implements Serializable{public String str = null;public MyTest(String str){this.str = str;}public static void main(String[] args) {MyTest test = new MyTest("Serializable");System.out.println("序列化之前:"+test.getStr());try {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.out"));out.writeObject(test);out.flush();out.close();ObjectInputStream input = new ObjectInputStream(new FileInputStream("test.out"));MyTest myTest = (MyTest)input.readObject();System.out.println("序列化之后:"+myTest.str);input.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public String getStr() {return str;}public void setStr(String str) {this.str = str;}}

如果你的程序中有一些关键信息不想被持久化(序列化)那么可以通过关键字transient来定义该变量,如:密码之类的不想被持久化,就能够通过这

个关键字关闭序列化,他的意思就是:不用你进行数据保存和恢复。

结果:序列化之前:Serializable  序列化之后:Serializable。

那么Java中还有那些方式能够达到序列化的效果(数据持久化)?在java中还能够通过XML的方式来将数据持久化,通过将数据转化为XML格式,然后

进行保存以及读取。除了XML格式还有Preferences方式,与对象序列化相比较,Preference 只能存储基本类型和字符串。并且每个字符串的长度不

能超过8K。他的作用主要用来存储程序的用户配置信息。

0 0
原创粉丝点击