- 博客(9)
- 收藏
- 关注
原创 Serializable:序列化代理
序列化代理简单来说,A有序列化的需求,但是不直接序列化A,而是序列化一个A的代理对象B,我们可以将A的信息保存在B中,在反序列化时,再通过B得到A的信息,实例化一个A对象 为什么这么费劲呢?因为反序列化是java机制之外的东西,不通过构造方法生成实例,这样有机会被入侵(具体说不上,就是有可能被黑的意思吧),采用序列化代理可以有效的避免通过反序列化来生成实例,所有的实例都通过构造函数来生成,这样就可
2015-07-08 14:40:06 958
原创 Serializable:writeReplace
如果一个序列化类中含有Object writeReplace()方法,那么实际序列化的对象将是作为writeReplace方法返回值的对象,而且序列化过程的依据是实际被序列化对象的序列化实现。People定义了writeReplace方法,并且自定义了writeObject/readObject方法。public class People implements Serializable{
2015-07-08 14:24:42 2118
原创 Serializable:readResolve
如果序列化类定义了Object readResolve() ,那么将无视readObject的实现,直接返回作为readResolve() 方法返回值的对象。public class People implements Serializable{ /** * */ private static final long serialVersionUID = 265
2015-07-08 14:06:24 848
原创 Serializable:自定义序列化
序列化对象可以自定义序列化,也可以使用默认序列化 如何选择呢? 这就要从序列化的目的说起,序列化的目的简单来说就是保存,之后可以还原,这就是说只要我们能达到这个目的,都是ok的。如果都ok那么就可以选择更ok的形式。看下面这个例子: OddNum 这是一个极其没有道理的例子,只是为了说明问题public class OddNum implements Serializable{ /*
2015-07-08 13:49:24 984
原创 Serializable:writeObject/readObject有的限制?
writeObject/readObject的实现有没有什么限制?答案是没有任何限制,可以任意实现。 比如说如下面这样:private void writeObject(ObjectOutputStream out) throws IOException{ System.out.println("这里的方法吧?");}private void readObject(ObjectInpu
2015-07-08 13:17:56 1572
原创 Serializable:serialVersionUID
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 “serialVersion
2015-07-08 10:05:05 407
原创 Serializable: 默认序列化
PeopleName 是一个人名对象,包含三个成员变量:firstName、middleName、lastName,非常适合用默认的序列化形式。下面说什么是默认序列化形式,默认序列化形式表现上来说就是只要实现Serializable ,任何其它的事情都不需要做了。public class PeopleName implements Serializable { private static
2015-07-08 09:53:00 1177
原创 java.util.concurrent
在java1.5发行版本中,java平台新增了java.util.concurrent。包括了三部分:Executor Framework、并发集合(Concurrent Collection)、以及同步器(Synchronizer)1 Executor FrameworkExecutor 接口publi
2015-07-06 17:34:50 484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人