呵呵,真惭愧,还真没想过这个问题。
javadoc上写着没实现Serializable就不能序列化和反序列化
Clonable接口也是,没有定义clone函数,只是说实现了Clonable接口
的类会改变父类的clone()函数返回子类的逐域拷贝。具体原理没研究过。
javadoc上写着没实现Serializable就不能序列化和反序列化
Clonable接口也是,没有定义clone函数,只是说实现了Clonable接口
的类会改变父类的clone()函数返回子类的逐域拷贝。具体原理没研究过。
解决方案 »
- 系统集成项目管理工程师考证,应该买什么书?
- android的平台如何实现一个邮件发送的工程?
- 关于jsp+servlet中的配置问题
- web.xml配置org.springframework.web.context.ContextLoaderListener监听器出错
- mybatis动态SQL语句判断,decimal类型的参数是0但是仍然判断为空
- 求一本介绍STRUTS的好书
- 怎么把一个文件以二进制流的形式写入数据库的一个字段并同样的方法还原成一个文件啊
- httpclient做抓取,最后一步的抓取是感觉是webservice,请求报文是SOAP类型的xml
- mycat io.mycat.config.util.ConfigException: org.xml.sax.SAXParseException
- 读取两个配置文件,为什么打印不出System.out.println(prop1.get(m1Key))????
- jsf怎么掉用javascript脚本!
- 有关在struts标签中嵌套变量的问题,急!!
什么是序列化可以看看这里:
http://www.j2medev.com/bbs/boke.asp?liuxm.showtopic.450.html
只有你implement 接口
你才具有改接口赋予的能力
显然实现了Serializable接口的类
jvm在处理该类对象的序列化的时候,会检查这个对象是不是有遵守这个协议,
好理解一点了吗!
2: 对于实现了 Serializable 接口的, 如果它提供了 readObject(ObjectInputStream) / writeObject(ObjectOutputStream) 方法的话, JVM 使用这对方法,如果没有提供的话,JVM 使用默认的方式来 保存/恢复 对象的状态。
3: private static final long serialVersionUID 这个东西用来标识一个类,当我的一个类(比如 工作在 Socket 客户端)是 1.2 版本,另外一个(比如工作在Socket 服务端)是 1.3 版本,他们有些地方不完全相同,JVM 还是可以认可他的(当然还需要满足一些条件,这也是 Java 类库中存在很多 @deprecated 类的缘故,因为版本升级类成员不可以比原来少,很多实现中采用 return null ; 或者 throw new UnsupportedOperationException() 的方式改写新版本中 @deprecated 方法)。在 log4j 的例子中我就用过 DatagramAppender 发送一个 LoggingEvent 对象,它是 log4j 1.2.8 版本,接收端 Log4jRadio 使用 log4j 1.2.12 ,版本不同也能工作。
2。限制操作,比如说你可以写自己的类就是不让人家序列化,就是不让人家克隆。
3。检查是否真的实现了接口规定,比如说牵涉到rmi的时候就要考虑实现serializable接口,自己本身就有了这个意识;然后实现的这个类是否真的能序列化,又要牵涉到所有引用类能否被序列化。当然这个有点牵强,因为这也要到运行时才能发现。但是首先要提出这个概念来,jvm才能对这些操作进行规范,起码抛出异常都简单明了一些把。
嗯,还是没说清楚。