- 浏览: 762180 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
其实这个问题简单思考一下就可以搞清楚,方法是不带状态的,就是一些指令,指令是不需要序列化的,只要你的JVM classloader可以load到这个类,那么类方法指令自然就可以获得。序列化真正需要保存的只是对象属性的值,和对象的类型。
这些知识找一本Java基础编程的书,或者Java手册就可以查到,我以为是不应该犯这种基本概念错误的。 我们可以做一个简单的小试验,来证实一下:
package com.javaeye; import java.io.Serializable; public class DomainObject implements Serializable { private String name; private int age ; public int getAge(); { return age; } public void setAge(int age); { this.age = age; } public String getName(); { return name; } public void setName(String name); { this.name = name; } }
package com.javaeye; import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class Main { public static void main(String[] args); throws Exception { DomainObject obj = new DomainObject();; obj.setAge(29);; obj.setName("fankai");; FileOutputStream fos = new FileOutputStream("DomainObject");; ObjectOutputStream oos = new ObjectOutputStream(fos);; oos.writeObject(obj);; oos.close();; fos.close();; } } DomainObject是我们准备序列化的类,在Main里面,我们new一个DomainObject的对象,然后赋值,最后把该对象序列化到一个硬盘文件中。 然后使用一种支持二进制编辑器,例如UltraEdit打开这个文件,看看Java都对DomainObject序列化了哪些信息,你就什么都明白了。 为了更方便观察,我使用Linux下面的strings去提取文本信息,输出为: robbin@linux:~> strings DomainObject com.javaeye.DomainObject ageL namet Ljava/lang/String;xp fankai 这些信息很直观的告诉我们序列化都保存了些什么内容: 1)对象的类型 2)对象属性的类型 3)对象属性的值 并没有什么方法签名的信息,更不要说什么序列化方法了。 然后我们再做一个试验,给DomainObject增加两个方法:
package com.javaeye; import java.io.Serializable; public class DomainObject implements Serializable { private String name; private int age ; public int getAge(); { return age; } public void setAge(int age); { this.age = age; } public String getName(); { return name; } public void setName(String name); { this.name = name; } public String toString(); { return "This is a serializable test!"; } public void doSomeWork(); { System.out.println("hello");; } } 我们增加了toString方法和doSomeWork方法,按照你的理论,如果序列化方法的话,产生的文件体积必然增大。记录一下文件体积,92Byte,好了,删除,运行程序,生成了新的文件,看一下体积,还是92Byte! 拿到Linux下面再提取一下字符串: robbin@linux:~> strings DomainObject com.javaeye.DomainObject ageL namet Ljava/lang/String;xp fankai 完全一模一样! 然后我们再做第三个试验,这次把DomainObject的两个属性以及相关方法删除掉:
package com.javaeye; import java.io.Serializable; public class DomainObject implements Serializable { public String toString(); { return "This is a serializable test!"; } public void doSomeWork(); { System.out.println("hello");; } } 修改Main类如下:
package com.javaeye; import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class Main { public static void main(String[] args); throws Exception { DomainObject obj = new DomainObject();; FileOutputStream fos = new FileOutputStream("DomainObject");; ObjectOutputStream oos = new ObjectOutputStream(fos);; oos.writeObject(obj);; oos.close();; fos.close();; } }
补充: 序列化在 Effective Java 中讲得很清楚啊, 一般认为只声明实现 implements 接口, 不提供自定义的序列化形式是不负责任的做法, 这样可能导致比较多的问题比如类的不同版本之间的兼容性, 看看 Effective Java 中的条目吧 谨慎地实现 Serialiable |
发表评论
-
Java transient关键字
2013-07-01 14:11 1278Java的serialization提供了一种持久化对象实例 ... -
java中的equals()和hashCode()详解
2013-06-23 17:21 1267java中对equals()和hashCode ... -
Java中synchronized 关键字的详解
2013-06-25 12:18 1747在了解cache的过程中,难免会涉及多线程的问题,涉及 ... -
PDF 报表合并
2012-08-14 15:34 1215import java.io.FileOutputStream ... -
java中 set,list,array(集合与数组)相互转换
2011-02-25 17:22 1882public static Object[] List2Arr ... -
互斥访问,限制最大数访问
2010-10-26 18:01 1420/** * @author jgao1 * 用法:P ... -
java中文件操作(递归删除空文件夹,删除过期文件)
2010-09-19 00:23 6412对文件的操作,大家都可能会写一些操作,其实Apache中Fil ... -
java IO类操作
2009-10-24 20:02 1720java的IO类操作主要包括如下几类 1、File类的使用 ... -
java中集合排序问题
2009-10-16 09:59 1709关键字: 集合排序 集合 排序 Iterator ... -
java中已知字体和字体大小确定字体的高度和长度
2009-09-21 17:27 4576public static void main(String ... -
java中路径处理分割
2009-09-12 16:30 5732在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上 ... -
文件中的流
2009-09-07 21:08 14761、base64inputStram public clas ... -
一个javaBean的操作类,主要用于复制bean
2009-08-20 17:53 2760今天用到Bean的复制..恰好有空,写了这个Bean操作类.. ... -
classUtils
2009-08-09 22:55 2049import java.io.File; import ja ... -
java多线程
2009-07-09 21:43 2231java多线程是java基础中的重点,下面就j ... -
java的类集详解
2009-07-05 20:20 2132在学习类集之前,先明确一个概念,那就是啥叫重量级, ... -
java的反射机制
2009-07-04 11:44 1495Java反射机制是利用元类(相似于元数据的概念,元 ... -
抽象类和接口
2009-06-28 15:57 1812今天复习下抽象类和接口。做点重要的笔记 1、抽象 ... -
java中的clone机制及序列化
2009-06-25 22:50 1566在实际编程过程中,我们常常要遇到这种情况:有一个对象A ... -
java字符串的各种编码转换
2009-06-25 21:22 1331import java.io.UnsupportedEncod ...
相关推荐
4. Java、PHPRPC、Hessian、Burlap、AMF3、XML序列化的效率对比:这些是不同的数据序列化技术,对比它们在性能上的差异,对于优化服务端通信和数据传输有指导意义。 5. Effective Java Second Edition中文版:该书...
JavaEye+技术架构,讲述java框架的应用
使用 Eclipse 平台进行调试 - Java - JavaEye论坛
javaeye被黑 大家看看
JavaEye API 的简单封装主要基于 Java 的 HttpClient 库,提供了更方便、易用的接口来执行 HTTP 请求。HttpClient 是一个成熟的 Java 库,用于执行 HTTP 协议的客户端请求,而 JavaEyeClient 则是对这个库进行了一层...
JavaEye新闻月刊2009年3月第13期内容涉及了当时软件开发领域内的一系列重要话题,包括IBM拟收购Sun Microsystems公司的新闻报道、Java社区对此的看法以及各种编程语言、开发工具和技术的新动态。 首先,新闻月刊...
在IT领域,尤其是在软件开发行业中,Java作为一种广泛使用的编程语言,拥有庞大的学习资源和社区支持。对于初学者而言,找到合适的学习资源是掌握Java技能的关键一步。以下是从给定文件中整理出的Java资源网站大全,...
【JavaEye月刊2008年4月总第2期】主要涵盖了多个与Java相关的技术和行业动态。以下是对这些内容的详细解析: 1. **Spring创始人Rod Johnson再次发飙—“传统Java应用服务器正在没落”** Rod Johnson是Spring框架的...
2. **AJAX可视化编辑器** - 报告中提到了一个由用户分享的AJAX可视化编辑器项目,该编辑器拥有40多个图形界面控件,如标签、对话框、树型表格和时间线等,展示了AJAX在构建复杂交互式界面方面的潜力。 3. **Shoes**...
### Java基础知识总结大全 #### 一、Java内存区域划分 Java程序运行时,根据不同的功能需求,被划分为几个不同的内存区域,主要包括: ...这对于后续深入学习Android开发或其他基于Java的应用开发具有重要的意义。
#### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人发起的Oak项目,最初目标是为了控制嵌入式设备,如有线电视交换盒和个人数字助理(PDA)。1994年,Oak语言被正式更名为Java。 - ...
在JAVA WEB开发中,上傳和下载功能是常见的需求,特别是在构建交互性强的Web应用程序时。这个主题主要涉及两个核心技术点:文件上传处理和服务器...理解并熟练掌握这些知识点,对于开发高质量的Java Web应用至关重要。
JavaEye可能是一个用于Java平台的开源库,它提供了将数据转换为PDF格式的功能,这对于创建报告、手册或其他需要打印或在线阅读的文档非常有用。在描述中提到的“博文链接”,虽然没有具体内容,但暗示了可能有更详细...
Java语言发展的历史中,Java的版本从Java 1.0开始,经历了Java 1.1、Java 1.2、Java 1.3、Java 1.4、Java 5、Java 6、Java 7、Java 8、Java 9等等,每个新版本的发布都带来了新的特性和改进。例如,Java 5版本中引入...
让想成为一个顶级程序员,学会调试异常是必不可少的。Eclipse调试常用技巧 -为你解决java程序中的出现的异常。