java 中的序列化是什么意思?有什么好处?
转自: <pre class="recommend-text mb-10" style="font-size:13px;">1、<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%BA%8F%E5%88%97%E5%8C%96&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,93,179);">序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%BA%8F%E5%88%97%E5%8C%96&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">序列化。 2、什么情况下需要<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%BA%8F%E5%88%97%E5%8C%96&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候; 3、当对一个对象实现序列化时,究竟发生了什么? 在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%AE%9E%E4%BE%8B%E5%8F%98%E9%87%8F&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">实例变量(instance ariable)比如: Foo myFoo = new Foo(); 当通过下面的代码序列化之后,MyFoo对象中的width和Height<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%AE%9E%E4%BE%8B%E5%8F%98%E9%87%8F&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%AE%9E%E4%BE%8B%E5%8F%98%E9%87%8F&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。 FileOutputStream fs = new FileOutputStream("foo.ser"); 4、实现序列化(保存到一个文件)的步骤 a)Make a FileOutputStream java 代码 java 代码 java 代码 5、举例说明 java 代码 public class Box implements Serializable public void setWidth(int width){ public static void main(String[] args){ try{ } 6、相关注意事项 a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=Serializable%E6%8E%A5%E5%8F%A3&fr=qb_search_exp&ie=utf8" rel="nofollow" style="color:rgb(7,179);">Serializable接口; 1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |