`
booby325
  • 浏览: 384257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.io中serializable讲解

 
阅读更多

1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化 
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
java 代码
  1. Foo myFoo = new Foo();
  2. myFoo .setWidth(37);
  3. myFoo.setHeight(70);

当 通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
java 代码
  1. FileOutputStream fs = new FileOutputStream("foo.ser");
  2. ObjectOutputStream os = new ObjectOutputStream(fs);
  3. os.writeObject(myFoo);

4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStreamjava 代码
  1. FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream 
java 代码
  1. ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object
java 代码
  1. os.writeObject(myObject1);
  2. os.writeObject(myObject2);
  3. os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代码
  1. os.close();
相关注意事项
a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。 
分享到:
评论

相关推荐

    java.io.Serializable序列化问题

    java.io.Serializable序列化问题

    stuts2.2_API文档

    java.lang.Throwable (implements java.io.Serializable) java.lang.Exception java.lang.RuntimeException com.opensymphony.xwork2.XWorkException (implements com.opensymphony.xwork2.util.location.Locatable...

    Hibernate注解映射联合主键

    第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并...

    java 中序列化NotSerializableException问题解决办法

    主要介绍了java 中序列化NotSerializableException问题解决办法的相关资料,这里对序列化问题进行描述说明,并提供解决办法,希望能帮助到大家,需要的朋友可以参考下

    java中的IO操作总结(四)

    java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

    spring4.0 API

    java.util.HashMap,V> (implements java.lang.Cloneable, java.util.Map,V>, java.io.Serializable) java.util.LinkedHashMap,V> (implements java.util.Map,V>) org.springframework.core.annotation....

    aesjava源码-THIS-.-IS-GREAT-:////IntelliJIDEA从.class文件重新创建的源代码//(由Fernflo

    导入java.io.Serializable; 导入java.security.AccessController; 导入java.security.AuthProvider; 导入java.security.InvalidParameterException; 导入java.security.Key; 导入java.security....

    Android 通过Intent使用Bundle传递对象详细介绍

    Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类; 2.Serializable在序列化的时候会...

    Java远程控制源代码

    import java.io.Serializable; public class Message implements Serializable { private static final long serialVersionUID = 1L; private String fileName; // 文件名称 private long fileLength; // ...

    java-Hadoop序列化

     Java序列化(java.io.Serializable)  Hadoop序列化的特点  Hadoop的序列化格式:Writable  序列化格式特点:  紧凑:高效使用存储空间。  快速:读写数据的额外开销小  可扩展:可透明地读取老格式...

    http依赖jar包.zip

    import java.io.Serializable; import java.util.HashMap; import java.util.Map; import com.google.gson.JsonObject; import com.google.gson.JsonArray; import net.sf.json.JSONObject; import org.apache....

    文档——学生管理系统

    class Student implements java.io.Serializable{ String number,name,specialty,grade,borth,sex; public Student(){}; public void setNumber(String number){ this.number=number;} public String getNumber(){ ...

    NC总帐API帮助文档

    java.io.Serializable, java.lang.Cloneable, java.util.EventListener, nc.vo.gl.vouchervaluechange.ValueChangeListener, nc.vo.glpub.IVoAccess -----------------------------------------------------------...

    7.7初始mybatis个人笔记.docx

    java.io.NotSerializableException: com.baizhi.entity.User 在mybatis中使用二级缓存时候就必须需要将实体类序列化implements Serializable,我的mapper文件使用了标签,使用了mybatis提供的二级缓存,所以在我的...

    基于JAVA的学籍管理系统

    public class Student implements java.io.Serializable { String number,name,discipling,grade,borth,sex; public Student() { } public void setNumber(String number) { this.number=number; } public ...

    析Android中的Serializable序列化.rar_Serializable _android

    Android中的Serializable

    Java_serialization_doc.rar_Serializable _doc_序列化

    Java中对象的序列化(serialization)允许把采用Serializable接口的任何对象转换成字节流序列;同时它也允许把字节流序列转换回对象本身。其机制不依赖于操作系统,也就是说,你可以通过网络传递该对象,并在网络...

    Java+SQL学籍管理系统

    其中一共包含6个页面,分别是: Delete.java Inquest.java ... /** * * @author Administrator */ public class Student implements java.io.Serializable { String number,name,discipling,grade,borth,sex;

    netty-JBoss-Marshalling:使用JBoss-marshalling编码包进行java的序列号编码

    但又保持跟java.io.Serializable接口的兼容;同时增加了一些可调的参数和附加的特性,并且这些参数和特性可通过工厂类进行配置。 相比于传统的Java序列化机制,它的优点如下: 可插拔的类解析器,提供更加便捷的类...

    Java 2平台安全技术-结构,API设计和实现

    3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含中的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 ...

Global site tag (gtag.js) - Google Analytics