A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 希望的曙光 中级黑马   /  2013-1-5 11:12  /  1169 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 11:26 编辑

java中的序列化如何实现的呢?以及Serializable接口的作用,他们之间关系和区别?

4 个回复

倒序浏览
有时候可以多百度一下


我们有时候将一个java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个java 对象,例如,要将java 对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java 对象变成某个格式的字节流再传输,但是,jre 本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java帮我们做,要被传输的对象必须实现serializable 接口,这样,javac 编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable 接口,该接口是一个mini 接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。例如,在web 开发中,如果对象被保存在了Session 中,tomcat 在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输或通过rmi 等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 郑传庆 于 2013-1-5 13:40 编辑

对于楼主说的问题,我个人涉及的范围也有限。我的理解是:实现Serializable接口的类是可以序例化的,也就相当于给一个类打上一个标记,表示是可以序例化的。同理,序例化的类的所有子类都是可以序例化的。看了下文档。该接口是没有任何方法的,也就是实现Serializable接口不用实现它的任何方法。
回复 使用道具 举报
序列化是一种用来处理对象流的机制,是将对象的状态信息转换为可以存储的格式的过程,对象序列化后可以通过IO流进行读写操作,也可以通过网络对序列化对象进行传输。
你可以通过实现Serializable接口启用类的序列化功能,接口没有提供方法,主要是为了标识对象已经序列化。
具体实现代码如下:
public class A implements Serializable{
//这里写类成员变量和方法
}

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
你好
对象序列化
ObjectInputStrem
ObjectOutputStrem

被序列化的对象所属的类必须实现Serializable接口,它是一个标识接口,标识类实例可以被序列化。

序列化时使用一个称谓SerialVersionUID的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接受者是否为该对象加载了与序列化兼容的类。如果接收者加载该对象的类的serialVersionUID与对应发送者的类的版本号不同,则反序列化将会导致InvalidClassException无效类型异常。

可序列化的类可以通过声明为serialVersionUID的字段(该字段必须是静态、最终(final)的long型字段)显示声明自己的serialVersionUID
static final long serialVersionUID=42L;

UID版本号是根据类成员信息获取的,静态和被transient修饰的成员不能被序列化。

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马