- 浏览: 225626 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sfshine:
非常好非常好
Android 窗口管理 -
mthhk:
...
android3.0之Fragment(碎片)基础 -
FrankHB1989:
“C/C++标准不会保证这样的代码一定不会出错”的依据?你要说 ...
Duff's Device -
2006003845:
请问知道 刚体之间怎么不碰撞嘛 ?相互穿插
JBOX2D分析
序列化是java中一个很常用而且很强大的功能。个人的看法,将java对象保存到磁盘,以后再从磁盘中读出来,这是java最常用到的功能之一。在基本的情况下,序列化能够“简单的起作用(just work)”。然而,随着越来越复杂的对象格式以及设计模式的被采用,透明的对象(transparent object)序列化可以“简单的起作用(just work)”的可能性变得越来越不可能了。在处理一个可控制集合的实例,比如单例和enum,就是序列化需要一些而外帮助的一种场景。
在单例对象可序列的任何场景,确保单例的对象被使用了是非常重要的。这是通过readresolve()接口来实现的。单例就是一个很好的例子:
- public final class MySingleton {
- private MySingleton() { }
- private static final MySingleton INSTANCE = new MySingleton();
- public static MySingleton getInstance() { return INSTANCE; }
- }
在上面的例子中,仅有一种方法获得MySingleton的实例-那就是使用getInstance()这个方法。然后,在简单的添加一个接口的实现后,这段代码就变得不可用了:
- public final class MySingleton implements Serializable {
- //.
现在通过可序列化的工具,我们可以将一个单例的实例对象写到磁盘,然后再读回来,从而有效地获得一个实例。即使构造函数是私有的,可序列化工具依然可以通过特殊的途径去创建类的一个新的实例。序列化操作提供了一个很特别的钩子(hook)-类中具有一个私有的被实例化的方法readresolve(),这个方法可以确保类的开发人员在序列化将会返回怎样的object上具有发言权。足够奇怪的,readresolve()并不是静态的,但是在序列化创建实例的时候被引用。我们在一分钟内就开始体验这个。下面的例子将说明readresolve()怎样在我们的单例中起作用:
- public final class MySingleton {
- private MySingleton() { }
- private static final MySingleton INSTANCE = new MySingleton();
- public static MySingleton getInstance() { return INSTANCE; }
- private Object readResolve() throws ObjectStreamException {
- // instead of the object we're on,
- // return the class variable INSTANCE
- return INSTANCE;
- }
- }
目前为止情形还是蛮不错的。但是在处理多个实例的事情,情形就变得有点复杂了。为了解释这点,我将通过一个类型安全的enmumeration来表现这点。请记住,JDK 5的enum类型已经帮你自动处理了这个readresolve的情况。下面是一个很小的enumeration的例子:
- public final class Sides {
- private int value;
- private Sides(int newVal) { value = newVal; }
- private static final int LEFT_VALUE = 1;
- private static final int RIGHT_VALUE = 2;
- private static final int TOP_VALUE = 3;
- private static final int BOTTOM_VALUE = 4;
- public static final LEFT = new Sides(LEFT_VALUE);
- public static final RIGHT = new Sides(RIGHT_VALUE);
- public static final TOP = new Sides(TOP_VALUE);
- public static final BOTTOM = new Sides(BOTTOM_VALUE);
- }
现在,我们来实现序列化,用来决定将返回那个实例的key取决于对象本身被设定的值:
- public final class Sides implements Serializable {
- private int value;
- private Sides(int newVal) { value = newVal; }
- private static final int LEFT_VALUE = 1;
- private static final int RIGHT_VALUE = 2;
- private static final int TOP_VALUE = 3;
- private static final int BOTTOM_VALUE = 4;
- public static final LEFT = new Sides(LEFT_VALUE);
- public static final RIGHT = new Sides(RIGHT_VALUE);
- public static final TOP = new Sides(TOP_VALUE);
- public static final BOTTOM = new Sides(BOTTOM_VALUE);
- private Object readResolve() throws ObjectStreamException {
- // Switch on this instance's value to figure out which class variable
- // this is meant to match
- switch(value) {
- case LEFT_VALUE: return LEFT;
- case RIGHT_VALUE: return RIGHT;
- case TOP_VALUE: return TOP;
- case BOTTOM_VALUE: return BOTTOM;
- }
- return null;
- }
- }
发表评论
-
Java中循环嵌套跳出的高效写法
2014-04-24 19:31 3076(下面写的这些并不是Jdk的新特性,也不是Java某个版本提供 ... -
Android各版本新增功能一览(转)
2013-12-05 20:43 1641Android3.0新增功能:主要增加全息主题 ... -
NotificationManager和Notification的使用总结(转)
2013-11-26 12:51 581这几天一直在修改twig ... -
Android应用程序资源的编译和打包过程分析 (转自老罗的博客)
2013-11-13 10:57 15460我们知道,在一个APK文件中,除了有代码文件之外,还 ... -
Proguard 源码分析 (七) 混淆
2013-11-10 21:19 1761本章我们讲Proguard非常重要的一个步骤:混淆Obfu ... -
Proguard源码分析(六)前文总结
2013-11-05 14:40 1029目前,我们读了Proguard的 ... -
Proguard源码分析(五) ConfigurationParser.keep参数
2013-10-31 14:43 3886本章节我们绕回来讲Keep参数,也就是Configurat ... -
Proguard源码分析(四) 压缩
2013-10-30 10:59 1068上一次我们讲了seed文件,这次我们说压缩,对应的输出文件是 ... -
Proguard源码分析(三)Seed文件
2013-10-29 12:45 1476Seed文件就是保持住的类文件,直白一点就是不被混淆的文件, ... -
Proguard源码分析(二)输出文件
2013-10-28 10:28 869ProGuard outputs thefollowing ... -
Android 2.2.2到Android 4.2.2源码下载地址(转)
2013-10-28 10:13 948Android 2.2.2到Android 4.2.2源码下 ... -
代码混淆器Proguard源码分析(一) 读取
2013-10-22 19:40 2259Proguard是Android中经常用的混淆工具,当然你也 ... -
Android内存之VSS/RSS/PSS/USS
2013-09-25 14:07 655Terms VSS - Vi ... -
chrome开源工程(转)
2013-09-13 10:42 1271在chrome地址栏输入about:credits就可以看 ... -
dex文件结构(转)
2013-09-03 14:10 969Dex文件和Dalvik虚拟机 在Android系统中 ... -
android clipPath切割画布
2013-08-29 12:00 6175(转自:http://wallage.blog.163.co ... -
Android WebView控件
2013-06-06 11:46 2207android.webkit库聚合了webkit内核的浏览器 ... -
dumpsys命令~(非常有用~)
2013-04-03 12:02 0dumpsys是系统中重要的函数,我们来看看它如何使用,都能 ... -
内存监控命令~
2013-04-03 00:30 0meminfo 命令:cat /proc/meminfo ... -
adb常用命令
2013-04-03 00:17 1047Android 调试桥(adb)是多种用途的工具,该工具可以 ...
相关推荐
java反序列化工具,覆盖jboss、weblogic、websphere。
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
代码中演示了Java设计模式中的单例模式,其中包括饿汉单例模式,懒汉单例模式以及序列化饭序列化单例模式。在实际的开发中,可以直接借鉴使用。
java 对象的序列化与反序列化 java 对象的序列化与反序列化
java反序列化工具;weblogic反序列化工具;jboss反序列化工具。
Java Json序列化与反序列化
java反序列化利用程序UI版Beta1.1
java 常用序列化和反序列化框架使用demo ,java 常用序列化和反序列化框架使用demo
java对象 java序列化 java反序列化
java反序列化利用程序UI版Beta1.1.a
java 的序列化与反序列化举例测试
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
大家请看Java的序列化结构有不足的地方请指教也希望指出不足的地方。
这是Java序列化标准规范,对于研究序列化源码能够提供指导作用,为深入研究Java序列技术奠定基础。
在应用java进行c-s开发的时候,尤其涉及到图片和视频之间的传输时,需要用序列化和反序列化技术,希望对您有帮助
java反序列化 weblogic反序列化
将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...
可以对Java反序列化漏洞进行验证,是针对weblogic中间件的很好用的工具。
java序列化和反序列化java序列化和反序列化java序列化和反序列化
这里很清楚的介绍了Java序列化实现的很多细节