84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
java.io.Serializable是一个没有任何待实现方法的接口,此接口在对象序列化的过程中起到了什么作用?或者此接口在java序列化机制中扮演什么角色?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。 摘抄于http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html PS:链接文章有详细的使用示例哟
大白话就是这个接口允许你把内存里你实例化的对象,当做文件保存下来。有什么用呢,举几个栗子 1.游戏存档:把主人公这个实力对象保存成文件,下次打开游戏就可以加载,接着玩啦哇 2.网络通信:一个机器上实例的对象,要传给另一台机器,先保存成文件再传哇
题主改题之后
你是想了解序列化的机理对吧,既然你诚心诚意的发问了,武藏小次郎~~~~~
好吧来看一下使用ObjectOutputStream类持久化一个对象的过程,writeObject0(Object obj, boolean unshared) 函数的源码1170~1185行(JDK 1.7.0_45)
if (obj instanceof String) { writeString((String) obj, unshared); } else if (cl.isArray()) { writeArray(obj, desc, unshared); } else if (obj instanceof Enum) { writeEnum((Enum) obj, desc, unshared); } else if (obj instanceof Serializable) { writeOrdinaryObject(obj, desc, unshared); } else { if (extendedDebugInfo) { throw new NotSerializableException( cl.getName() + "\n" + debugInfoStack.toString()); } else { throw new NotSerializableException(cl.getName()); } }
看到了吧,对象如果是String、是数组、是枚举、是Serializable就相应的函数把对象写成文件否则抛出错误,扮演什么角色呢,就是一个标志而已。
如果仅仅只是让某个类实现Serializable接口,而没有其它任何处理的话,则就是使用默认序列化机制。使用默认机制,在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化,同样地,这些其它对象引用的另外对象也将被序列化,以此类推。所以,如果一个对象包含的成员变量是容器类对象,而这些容器所含有的元素也是容器类对象,那么这个序列化的过程就会较复杂,开销也较大。 依然摘抄与上个链接
Externalizable继承于Serializable,当使用该接口时,序列化的细节需要由程序员去完成。我想你是需要这个~~~
空接口在使用 instanceof 来判断类型的时候就有用了
instanceof
public class Test { public static void main(String[] args) { T1 t1 = new T1(); T2 t2 = new T2(); System.out.println("t1: " + (t1 instanceof java.io.Serializable)); System.out.println("t1: " + (t2 instanceof java.io.Serializable)); } } class T1 {} class T2 implements java.io.Serializable {}
如果你看 OpenJDK 的源码,可以看到 ObjectOutputStream.java 中有这么一段与之有关的代码:
// remaining cases if (obj instanceof String) { writeString((String) obj, unshared); } else if (cl.isArray()) { writeArray(obj, desc, unshared); } else if (obj instanceof Enum) { writeEnum((Enum) obj, desc, unshared); } else if (obj instanceof Serializable) { writeOrdinaryObject(obj, desc, unshared); } else { if (extendedDebugInfo) { throw new NotSerializableException( cl.getName() + "\n" + debugInfoStack.toString()); } else { throw new NotSerializableException(cl.getName()); } }
源码参考 http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/d1f592073a0e/src/share/classes/java/io/ObjectOutputStream.java 第 1176 行
1176
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
摘抄于http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html
PS:链接文章有详细的使用示例哟
大白话就是这个接口允许你把内存里你实例化的对象,当做文件保存下来。有什么用呢,举几个栗子
1.游戏存档:把主人公这个实力对象保存成文件,下次打开游戏就可以加载,接着玩啦哇
2.网络通信:一个机器上实例的对象,要传给另一台机器,先保存成文件再传哇
题主改题之后
你是想了解序列化的机理对吧,既然你诚心诚意的发问了,武藏小次郎~~~~~
好吧来看一下使用ObjectOutputStream类持久化一个对象的过程,writeObject0(Object obj, boolean unshared) 函数的源码1170~1185行(JDK 1.7.0_45)
看到了吧,对象如果是String、是数组、是枚举、是Serializable就相应的函数把对象写成文件否则抛出错误,扮演什么角色呢,就是一个标志而已。
如果仅仅只是让某个类实现Serializable接口,而没有其它任何处理的话,则就是使用默认序列化机制。使用默认机制,在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化,同样地,这些其它对象引用的另外对象也将被序列化,以此类推。所以,如果一个对象包含的成员变量是容器类对象,而这些容器所含有的元素也是容器类对象,那么这个序列化的过程就会较复杂,开销也较大。
依然摘抄与上个链接
Externalizable继承于Serializable,当使用该接口时,序列化的细节需要由程序员去完成。我想你是需要这个~~~
空接口在使用
instanceof
来判断类型的时候就有用了如果你看 OpenJDK 的源码,可以看到 ObjectOutputStream.java 中有这么一段与之有关的代码:
源码参考 http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/d1f592073a0e/src/share/classes/java/io/ObjectOutputStream.java 第
1176
行