- 浏览: 603305 次
- 性别:
- 来自: 太原
文章分类
- 全部博客 (240)
- 程序员数学/线性代数(Linear Algebra) (2)
- 程序员数学/微积分(Calculus) (6)
- 机器学习(Machine Learning) (5)
- JAVA SE (63)
- JAVA EE (14)
- 数据库技术 (26)
- struts (4)
- 软件设计/设计模式 (0)
- ibatis (2)
- XML (4)
- 领域建模 (0)
- 数据资源共享 (1)
- 软件工程 (11)
- 技术以外 (6)
- 面向对象 (2)
- 科学数据共享 (1)
- 资源 (7)
- WEB2.0 (11)
- 电子商务 (10)
- 算法、数据结构、数学 (10)
- LAMP (1)
- 杂谈 (12)
- C语言 (7)
- 程序设计思想 (3)
- 读书和笔记 (1)
- 生活 健身 养生 (5)
- WEB UI (2)
- eclipse (2)
- 项目管理 (7)
- oracle (5)
- linux (1)
- webGIS (6)
最新评论
-
TimePower:
OK~终于明白了~~
参数(parameter)和属性(Attribute)的区别 -
OnTheRoad_lee:
不错,正式我想要的东西,一直不明白序列化是什么?有什么用?至此 ...
我对Java Serializable(序列化)的理解和总结 -
EchoZhouYou:
好久不上这,找这本书时发现这一篇,特意登录来赞一下
《程序设计语言——实践之路》读后感 -
yong7356:
学习一下Serializable
我对Java Serializable(序列化)的理解和总结 -
dengjm_2012:
写得不错!
我对Java Serializable(序列化)的理解和总结
1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
当 通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
b)Make a ObjectOutputStream
c)write the object
d) close the ObjectOutputStream
5、举例说明
6、相关注意事项
a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
java 代码
- Foo myFoo = new Foo();
- myFoo .setWidth(37);
- myFoo.setHeight(70);
当 通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
java 代码
- FileOutputStream fs = new FileOutputStream("foo.ser");
- ObjectOutputStream os = new ObjectOutputStream(fs);
- os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
java 代码
- FileOutputStream fs = new FileOutputStream("foo.ser");
java 代码
- ObjectOutputStream os = new ObjectOutputStream(fs);
java 代码
- os.writeObject(myObject1);
- os.writeObject(myObject2);
- os.writeObject(myObject3);
java 代码
- os.close();
5、举例说明
java 代码
- import java.io.*;
- public class Box implements Serializable
- {
- private int width;
- private int height;
- public void setWidth(int width){
- this.width = width;
- }
- public void setHeight(int height){
- this.height = height;
- }
- public static void main(String[] args){
- Box myBox = new Box();
- myBox.setWidth(50);
- myBox.setHeight(30);
- try{
- FileOutputStream fs = new FileOutputStream("foo.ser");
- ObjectOutputStream os = new ObjectOutputStream(fs);
- os.writeObject(myBox);
- os.close();
- }catch(Exception ex){
- ex.printStackTrace();
- }
- }
- }
6、相关注意事项
a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
评论
15 楼
OnTheRoad_lee
2014-06-20
不错,正式我想要的东西,一直不明白序列化是什么?有什么用?至此终于可以告一段落了
14 楼
yong7356
2013-11-11
学习一下Serializable
13 楼
dengjm_2012
2012-05-17
写得不错!
12 楼
andy54321
2008-08-04
thank for sharing
11 楼
zhoujj303030
2008-08-03
还是挺详细的,多多学习!
10 楼
aninfeel
2008-06-16
再加一条我的经验,servlet和applet交互时用系列化对象传输很不错,担心编码的话可以用base64。
9 楼
Chihom
2008-06-15
谢谢楼主。
8 楼
whshuaish
2007-10-26
好象听懂了....以前只是看到别个用过...不晓得该怎样使用的..谢谢了
7 楼
qingyuan914
2007-09-10
我也提一点,序列化就是要保存对象此时的状态,也就是state,目的就是为了以后要用到此时状态的对象,又怎样把序列化的对象回复内存中呢。给几个方法:1从文件中这么获得;2从网络的上怎么获得;3用RMI怎么获得?
6 楼
xiebh
2007-09-10
总结可以使别人的知识变成自己的东西,可以使知识更清晰
5 楼
hlxiong
2007-09-10
边学习边总结是一个非常不错的方法,这样你学的知识基本都会运用了。
记得我刚开始学java的时候,只会只照着例子copy,然后傻呵呵等着早就知道结果的答案,巨笨。
记得我刚开始学java的时候,只会只照着例子copy,然后傻呵呵等着早就知道结果的答案,巨笨。
4 楼
xiebh
2007-09-09
我也看了transient这方面的资料,可能由于时间关系,没有进行总结,我会继续努力
3 楼
dennis_zane
2007-09-09
没有超过TIJ的讨论,况且也没有谈论到transient关键字
2 楼
sharong
2007-09-07
嗯,这个是java最基本的设计思想,javaer必须理解这个思想,里面有一点点装箱和拆箱的概念在里面
1 楼
zzysh
2007-09-07
不错。有学习了点core java的知识
发表评论
-
Drools JBPM区别
2011-03-21 18:02 1745参考资料: 1、http://www.simpleframew ... -
推荐web开发教材
2009-11-25 13:00 1368大家能否给推荐一本 用JAVA语言相关的WEB开发方面的教材。 ... -
JAVA 线程编程 ----两个线程程序
2009-11-20 13:08 2069Java的内置线程支持 关 ... -
JAVA 线程编程 ----什么时候多线程可能不好(When Multiple Threads Might Not Be Good)
2009-11-13 12:59 1201设计程序时候创建更多的线程不总是一个好主意。线程不是免费的;它 ... -
JAVA 线程编程 ----为什么要用多线程(Why Use Multiple Thread)
2009-11-11 15:51 3327许多情况下,在一个程 ... -
JAVA 线程编程 ----线程介绍
2009-11-10 14:59 1215概述 浏览网页时,当 ... -
DataSource data source JNDI之间的关系
2009-09-16 17:01 2321data source :所谓data source就 ... -
字符,字节和编码三者的关系
2009-06-03 23:17 0http://www.regexlab.com/zh/enco ... -
jasperreport
2009-05-04 14:17 0http://www.docstoc.com/docs/213 ... -
iReport设计报表以Excel格式导出时注意的问题
2009-04-23 15:08 7136刚开始使用iReport工具,没想到就遇到了问题: 在以Exc ... -
到主机 的 TCP/IP 连接失败,达到最大连接数
2009-04-23 14:35 4398问题描述: _______________ ... -
Acegi框架介绍
2009-03-30 23:57 1464转自:这里 灰色字体 ... -
对语言的一些理解
2008-05-06 17:54 1412语言的本质 包 ... -
HOW TO DESIGN PROGRAMS
2008-04-21 09:55 1660http://www.htdp.org ·前言 向儿童传 ... -
AOP 入门好文章
2008-04-18 18:42 1409http://dev.rdxx.com/Java/2005-0 ... -
Head First JSP &Servlet读后感------chapt01
2008-01-02 22:50 2001Web程序和普通的GUI程序 ... -
JNDI资料整理
2007-12-26 16:38 1266******************************* ... -
JDBC初级应用实例(二) 转
2007-12-25 09:35 1184转自:http://blog.csdn.net/axman/a ... -
JDBC初级应用实例(一) 转
2007-12-25 09:25 1395转自:http://blog.csdn.net/a ... -
JDBC基础(四)转
2007-12-25 09:07 1244转自:http://blog.csdn.net/axman/a ...
相关推荐
Java_Serializable(序列化) 的理解和总结
Serializable接口和Externalizable接口实现序列化和反序列化
使用xstream序列化的类不需要实现serializable接口。xstream是一种序列 化工具而不是数据绑定工具,就是说不能从xml或者xml schema definition (xsd)文件生成类。 和其他序列化工具相比,xstream 有三个突出的特点...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 56 75、描述一下JVM加载class文件的原理机制? 56 76、heap和stack有什么区别。 57 77、GC是什么? 为什么要有GC? 57 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...
74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾...
序列化的方式 Serializable 和Parcelable 的区别 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 静态内部类的设计意图 成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 ...
事实上,即便不加@preserve指令,Jocky对Java语言特有的一些private级别的方法不进行混淆,譬如,在序列化时有特殊作用的writeObject及readObject方法等。但笔者强烈建议: 针对这些有特殊含义不能够被混淆的 ...
序列化,Serializable在序列化时使用了反射,从而导致GC的频繁调用。 可见性,原子性,有序性 可见性volatile,一个线程的修改对另外一个线程是马上可见的。 原子性CAS操作,要么都做要么都不做 有序性synchronized...
一. Java 基础部分............................................................................................................43、Java 中的异常处理机制的简单原理和应用。 .....................................