当前位置:编程学习 > JAVA >>

**java为什么要序列化

java为什么要序列化
网上看了很多,还是不知道为什么有的类要写implements Serializable,而写了之后就不用做其他序列化的事情吗?
序列化是不是只是在分布式中会用到? --------------------编程问答-------------------- 我要将一个对象从一台电脑传输到另一台电脑就要序列化

我想讲对象保存到数据库也要序列化 --------------------编程问答-------------------- 网络传输~ --------------------编程问答-------------------- 一座大厦好比一个对象,你要把这座大厦搬到另外一个地方去,你想直接挪肯定不行吧?(一般来说,只有传值,没有传对象)但我可以搬砖头吧,一个一个搬,然后搬到目的地重新组合成一个大厦,而序列化就起到了将大厦分成砖头的作用,纯属个人理解,知识还得自己去看和练习 --------------------编程问答--------------------
引用 3 楼 chen1519 的回复:
一座大厦好比一个对象,你要把这座大厦搬到另外一个地方去,你想直接挪肯定不行吧?(一般来说,只有传值,没有传对象)但我可以搬砖头吧,一个一个搬,然后搬到目的地重新组合成一个大厦,而序列化就起到了将大厦分成砖头的作用,纯属个人理解,知识还得自己去看和练习

通俗易懂 --------------------编程问答-------------------- 序列化序列化,就是保证他的顺序吧。 --------------------编程问答-------------------- 哈哈  要不然怎么能在两台机器之间传输对象啊?? RMI  你看看哈  --------------------编程问答--------------------
引用楼主 zzh200411 的回复:
java为什么要序列化
网上看了很多,还是不知道为什么有的类要写implements Serializable,而写了之后就不用做其他序列化的事情吗?
序列化是不是只是在分布式中会用到?

是的 , 远程对象调用的时候 你看看书。。。另外上面说的 持久化到数据库,我就不清楚了。。。应该是持久化到 对象数据库 ??? --------------------编程问答-------------------- 有人能跟我说过序列化的一个很形象的例子
给你一头牛,你给我做成牛肉罐头!
对象就是牛,序列化的目的是把牛切碎,方便于做罐头(方便数据的交互) --------------------编程问答-------------------- 如果你想在网络上传输一个对象,那你只能通过序列化,因为网络传输不是对象放进方法里,网络传输只能通过字节流,不能直接传输对象,对象被从一段传输到另外一端,然后进行反序列化,还原成发送端的状态 --------------------编程问答-------------------- 序列化就像是给对象编了个号,对应的反序列化就是根据这个编号还原对象。主要用于不同机器间传送或存到硬盘或数据库中。
反序列化就是根据serialVersionUID来还原对象,这也是为什么serialVersionUID为什么那么长,主要是为了保持唯一性。
如果没有序列化,你想想另外一台机器怎么还原呢 --------------------编程问答-------------------- 保证数据的安全和完整性

在Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。 --------------------编程问答-------------------- 序列化 有利于网络传输文件! --------------------编程问答-------------------- 利于网络传输。 --------------------编程问答--------------------
引用 10 楼 hackersun12345 的回复:
序列化就像是给对象编了个号,对应的反序列化就是根据这个编号还原对象。主要用于不同机器间传送或存到硬盘或数据库中。
反序列化就是根据serialVersionUID来还原对象,这也是为什么serialVersionUID为什么那么长,主要是为了保持唯一性。
如果没有序列化,你想想另外一台机器怎么还原呢

+1 --------------------编程问答-------------------- 你想把文件保存到本地文件里,也可以用序列化。
其实这种问题没必要问。需要用的时候自然就知道了。不需要用问了也用不着。 --------------------编程问答-------------------- 那是因为你没有碰到这方面的需求,所以不知道为什么要序列化 --------------------编程问答-------------------- java中的一些常见的类,比如Map,String,List等就实现序列化,因此我们可以将它们直接存入文件中和进行网络传输。

之所以要将其序列化,那是因为在网络传输和文件存储对象时,都得以字节的形式上演才行。因为计算机的“中下层阶级干部”都不认识对象,而序列化就是将这些对象贬为字节流和其它数据信息,这下他们该认识了

但并非所有的对象都应该序列化,毕竟它对对象进行了特殊的处理,需要额外的开销导致速度变慢。

也因此,如果我们自己写的一些类,目的只是在项目中起过渡作用,就无需将其序列化,不是吗

以上,只是个人的理解,前面的高手也都解释的很清楚了,希望对你有所帮助吧 --------------------编程问答-------------------- 我想把对象 持久化 就得序列化,不然怎么保存对象啊! --------------------编程问答-------------------- implements Serializable实现序列化的标识 jvm会根据这个进行对对象的序列化 ,有时间你的对象通过网络传递到别的计算机上 这时候就需要进行序列化啊,在那一边在进行反序列化得到对象,如RMI --------------------编程问答-------------------- (对象)序列化其实就是让对象以一定得规则传输或者存储。 --------------------编程问答--------------------
引用 19 楼 ajun_studio 的回复:
implements Serializable实现序列化的标识 jvm会根据这个进行对对象的序列化 ,有时间你的对象通过网络传递到别的计算机上 这时候就需要进行序列化啊,在那一边在进行反序列化得到对象,如RMI

个人理解,序列号就是相当于给这个类一个标识,便于移植。 --------------------编程问答-------------------- 1.序列化,就是将内存中的对象保存到磁盘上 或者 在IO流中传输。
2.implements Serializable就是用来标识这个类的对象可以被序列化,如果不标识,则不可序列化。

内存中的对象(就是你new出来的那些东西)就好比自然界中的空气,它是真实存在的,但是你又无法真实的看到摸到,有一天你想搞个空气运输或者保存个空气样本,那你怎么办?通常情况下是把空气压缩一下,压缩成液体或者固体,这样就可以进进行运输或保存了。
对象序列化就好比把空气“压缩”的过程(注意压缩只是一种操作过程,并不是说吧对象给压缩了,而是给序列化),你把对象从内存中“序列化”出来,序列化成你可以“看的见,摸的着”的东西,然后就可以把对象保存到磁盘上或者进行IO运输了。
--------------------编程问答-------------------- 每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 --------------------编程问答-------------------- 序列化后就是一个byte[],可以整个存到关系数据库中

引用 7 楼 zhao251021539 的回复:
引用楼主 zzh200411 的回复:
java为什么要序列化
网上看了很多,还是不知道为什么有的类要写implements Serializable,而写了之后就不用做其他序列化的事情吗?
序列化是不是只是在分布式中会用到?

是的 , 远程对象调用的时候 你看看书。。。另外上面说的 持久化到数据库,我就不清楚了。。。应该是持久化到 对象数据库 ???
--------------------编程问答-------------------- 楼上的讲的比我知道的还多,不说什么了…… --------------------编程问答--------------------
引用 24 楼 ticmy 的回复:
序列化后就是一个byte[],可以整个存到关系数据库中


引用 7 楼 zhao251021539 的回复:

引用楼主 zzh200411 的回复:
java为什么要序列化
网上看了很多,还是不知道为什么有的类要写implements Serializable,而写了之后就不用做其他序列化的事情吗?
序列化是不是只是在分布式中会用到?

是的 , 远程对象调用的时候 你看看……

这是怎么个状况。。。没这么用过啊,我一直以为存到关系数据库 是把属性存进去 啊。。 --------------------编程问答-------------------- 假如有个很细的管子,一块肉和一本书,你想把肉和书从管子的一边传到另一边。
1,传肉的话要把肉切碎了传,到管子的另一边就成肉馅了。这个是不可被序列化的结果。
2,传书的话可以把书一页一页的撕下来卷成纸筒传过去,都传完之后按照页数排列好订在一起。这个是可被序列化的结果。

不知道这个例子能不能帮助你理解。 --------------------编程问答-------------------- 拿分走人 走人。 --------------------编程问答-------------------- 都是高手,那个压缩空气的讲的好,看不见的但确实存在于内存中的对象变成字节保存到磁盘上,形成一个一个文件,可以想想游戏中的存档,暂时不用它了,等用的时候,再反序列化成对象到内存中,这样就恢复到当时保存的状态。数据不会丢哦~~~ --------------------编程问答--------------------
引用 5 楼 softroad 的回复:
序列化序列化,就是保证他的顺序吧。


鄙视这个打酱油的回答 --------------------编程问答-------------------- 对序列化也不太明白,来瞅瞅。。 --------------------编程问答-------------------- 网络传输 缓存 当然不一定非得要用持久化 只不过持久化更方便 快捷 --------------------编程问答-------------------- 学到了很多,拿分走人 --------------------编程问答-------------------- 主要是解决对象的传输和保存的手段,用于数据对象的交换

实现seriazable接口,表明具有可序列化的能力 --------------------编程问答-------------------- 序列化应该是方向来的,但内存布局差别很大 。。。。
这里有难度 --------------------编程问答-------------------- 把对象持久化到文件里也会用到 --------------------编程问答-------------------- 序列化对象就是为了反序列化,以便更好的查找出对象出来 嘻嘻 --------------------编程问答--------------------
引用 27 楼 guoyan78 的回复:
假如有个很细的管子,一块肉和一本书,你想把肉和书从管子的一边传到另一边。
1,传肉的话要把肉切碎了传,到管子的另一边就成肉馅了。这个是不可被序列化的结果。
2,传书的话可以把书一页一页的撕下来卷成纸筒传过去,都传完之后按照页数排列好订在一起。这个是可被序列化的结果。

不知道这个例子能不能帮助你理解。

对我有用···通俗易懂 --------------------编程问答-------------------- 不错,初学者容易纠结的问题。 --------------------编程问答-------------------- 顶下! --------------------编程问答-------------------- 很简单,序列化用于不同语言的“数据通信”,不同语言不数据保存成二进制,这样可以保存数据的特性,也能用于不同语言的通信! --------------------编程问答-------------------- 邮件发送 带附件 用到序列化了吧  --------------------编程问答-------------------- 顶,那个“管子”哥,比喻的不错,很好 --------------------编程问答-------------------- Serializable,英文意思就是 串行化,又译为序列化,就是将内存中的对象变成可以放在外存中或是进行网络传输的字符串序列,故名为串行化(或序列化)。序列化时通常要用到ByteArrayInputStream或ByteArrayOutputStream. --------------------编程问答-------------------- 我也想知道呢,, --------------------编程问答--------------------
引用 8 楼 lmx1989219 的回复:
有人能跟我说过序列化的一个很形象的例子
给你一头牛,你给我做成牛肉罐头!
对象就是牛,序列化的目的是把牛切碎,方便于做罐头(方便数据的交互)

靠,这比喻,无语了。

序列化的目的是为了在另一个进程中能够反序列化
所以反序列化就是给你一堆罐头,你顺序的把他们打开,再拼成一头牛,而且还得会吃草能挤奶。 --------------------编程问答--------------------
引用 2 楼 lrbyantai 的回复:
网络传输~


这个很形象··· --------------------编程问答-------------------- 楼上都是高手 比喻的都很不错 顶了 --------------------编程问答-------------------- 是很不错,想知道代码是怎么实现的…… --------------------编程问答--------------------
引用 8 楼 lmx1989219 的回复:
有人能跟我说过序列化的一个很形象的例子
给你一头牛,你给我做成牛肉罐头!
对象就是牛,序列化的目的是把牛切碎,方便于做罐头(方便数据的交互)

很不错! --------------------编程问答-------------------- 为了好用吧 --------------------编程问答-------------------- 高手如云啊 --------------------编程问答-------------------- 学习学习学习学习学习学习 --------------------编程问答-------------------- 老师说过,有流操作就会用到序列化 --------------------编程问答-------------------- 不系列化,就不能把某个对象在网络上进行传输,或者将某个对象保存到文件中。。。 --------------------编程问答-------------------- javabean为什么要序列化呢??????????
??? --------------------编程问答-------------------- 3 楼的解释的很好。 --------------------编程问答-------------------- 网络传输用到 --------------------编程问答-------------------- 说白了,序列化其实就是把内存中的数据按照一定的规则(比如从高字节到低字节)读取出来,然后再进行传输。

上面人说的把牛肉变成罐头,这个比喻不恰当,因为罐头不能复原成牛肉。序列化后的对象可以进行反序列化的。

然后还有人说把大厦拆了,然后一块砖一块的搬,没必要这么干吧,序列化一座大厦完全可以把建造大厦的图纸传过去,然后再在目的的进行建造。

我是这么理解的 请高人指点。 --------------------编程问答--------------------
引用 10 楼 hackersun12345 的回复:
序列化就像是给对象编了个号,对应的反序列化就是根据这个编号还原对象。主要用于不同机器间传送或存到硬盘或数据库中。
反序列化就是根据serialVersionUID来还原对象,这也是为什么serialVersionUID为什么那么长,主要是为了保持唯一性。
如果没有序列化,你想想另外一台机器怎么还原呢

+2 --------------------编程问答-------------------- --------------------编程问答-------------------- 楼上正解,对象传输必须序列化 --------------------编程问答--------------------    java中的序列化就是把一个对象进行特殊处理,保证从一个地方传输(包括网络传输,最根本的是对象流)到另一个地方接收的时候可以正确识别这个对象!就和网络协议一样,如果没有进行这个特殊的操作,当然就不能正确识别一个对象了!java 中 Serializable 接口只是一个标识,标识这个类的对象在传输过程中进行这个特殊处理!
   这样解释,应该可以理解了吧!呵呵 --------------------编程问答-------------------- 减少乱码 --------------------编程问答-------------------- 简单的说,就是让数据不乱。 --------------------编程问答-------------------- 实现Serializable接口的类使用后,最好不要修改,否则可能出现版本问题. 

邮件和附件的传输好像不是序列化吧,是Socket + 协议吧,我的理解 --------------------编程问答-------------------- 好比搬一个大型的物体.肯定要拆开搬把.这样就要实现序列化! --------------------编程问答-------------------- LZ解释的都很好,我就不说什么了吧 --------------------编程问答-------------------- 达到一知半解了,呵呵 --------------------编程问答-------------------- 把对象 存起来  --------------------编程问答-------------------- Serializable只是说明这个类可以被序列化
打个比方,一个游戏,要存档,就要保存当前状态
实现起来就可以把game这个对象序列化,然后保存到硬盘,读档时,再转换成对象 --------------------编程问答--------------------
引用 22 楼  的回复:
1.序列化,就是将内存中的对象保存到磁盘上 或者 在IO流中传输。
2.implements Serializable就是用来标识这个类的对象可以被序列化,如果不标识,则不可序列化。

内存中的对象(就是你new出来的那些东西)就好比自然界中的空气,它是真实存在的,但是你又无法真实的看到摸到,有一天你想搞个空气运输或者保存个空气样本,那你怎么办?通常情况下是把空气压缩一下,压缩成液体或者固……


说的好,学习了…… --------------------编程问答-------------------- 序列化有利于将文件化成二进制文件,方便文件的传输,所以要序列化。 --------------------编程问答-------------------- 版本兼容 --------------------编程问答--------------------
引用 3 楼  的回复:
一座大厦好比一个对象,你要把这座大厦搬到另外一个地方去,你想直接挪肯定不行吧?(一般来说,只有传值,没有传对象)但我可以搬砖头吧,一个一个搬,然后搬到目的地重新组合成一个大厦,而序列化就起到了将大厦分成砖头的作用,纯属个人理解,知识还得自己去看和练习
有点《代码大全》的味道。 --------------------编程问答--------------------
引用 22 楼  的回复:
1.序列化,就是将内存中的对象保存到磁盘上 或者 在IO流中传输。
2.implements Serializable就是用来标识这个类的对象可以被序列化,如果不标识,则不可序列化。

内存中的对象(就是你new出来的那些东西)就好比自然界中的空气,它是真实存在的,但是你又无法真实的看到摸到,有一天你想搞个空气运输或者保存个空气样本,那你怎么办?通常情况下是把空气压缩一下,压缩成液体或者固体……


通俗易懂。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 24 楼 ticmy 的回复:
序列化后就是一个byte[],可以整个存到关系数据库中

但是,我们没有序列化的时候也是可以存入数据库的。
不知这个区别在哪? --------------------编程问答-------------------- 网络传输啊! --------------------编程问答-------------------- 我是来学习的~~~
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,