`
gaofen100
  • 浏览: 1187286 次
文章分类
社区版块
存档分类
最新评论

Java Serialization 序列化

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

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

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

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

4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
java 代码
  1. FileOutputStreamfs=newFileOutputStream("foo.ser");
b)Make a ObjectOutputStream
java 代码
  1. ObjectOutputStreamos=newObjectOutputStream(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();


5、举例说明
java 代码
  1. importjava.io.*;
  2. publicclassBoximplementsSerializable
  3. {
  4. privateintwidth;
  5. privateintheight;
  6. publicvoidsetWidth(intwidth){
  7. this.width=width;
  8. }
  9. publicvoidsetHeight(intheight){
  10. this.height=height;
  11. }
  12. publicstaticvoidmain(String[]args){
  13. BoxmyBox=newBox();
  14. myBox.setWidth(50);
  15. myBox.setHeight(30);
  16. try{
  17. FileOutputStreamfs=newFileOutputStream("foo.ser");
  18. ObjectOutputStreamos=newObjectOutputStream(fs);
  19. os.writeObject(myBox);
  20. os.close();
  21. }catch(Exceptionex){
  22. ex.printStackTrace();
  23. }
  24. }
  25. }

6、相关注意事项
a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。


转自:http://www.iteye.com/topic/121311

分享到:
评论

相关推荐

    java 对象序列化

    java 序列化对象 MARSHALLING UNMARSHALLING

    探讨和比较Java和.NET的序列化(Serialization)框架

    探讨和比较Java和.NET的序列化(Serialization)框架

    java-Hadoop序列化

     序列化(Serialization)是指把结构化对象转化为字节流。  反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。  Java序列化(java.io.Serializable)  Hadoop序列化的特点  ...

    Java序列化的机制和原理

    Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个...

    深入浅析Java Object Serialization与 Hadoop 序列化

    序列化是指将结构化对象转化为字节流以便在网络上传输或者写到磁盘永久存储的过程。下面通过本文给大家分享Java Object Serialization与 Hadoop 序列化,需要的朋友可以参考下

    Java序列化与反序列化三种格式存取

     Java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个...

    Java快速序列化库FST.zip

    FST fast-serialization 是重新实现的 Java 快速对象序列化的开发包。序列化速度更快(2-10倍)、体积更小,而且兼容 JDK 原生的序列化。要求 JDK 1.7 支持。 Maven:  <groupId>de.ruedigermoeller  ...

    详解Java 序列化与反序列化(Serialization)

    主要介绍了Java 序列化与反序列化(Serialization),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    jackson-serialization-examples:常用的Java JSON序列化示例

    序列化 杰克逊-序列化字符串 Jackson-将字符串序列化为JSON对象 Jackson-序列化字符串列表 杰克逊–序列化字符串映射 Jackson-序列化String Wrapper类 Jackson-使用LocalDate序列化对象(默认) Jackson-使用ISO...

    Java序列化(Serialization) 机制

    本篇文章是对Java中对象的序列化(Serialization) 机制进行了详细的分析介绍,并附实例,需要的朋友可以参考下

    Java_serialization_doc.rar_Serializable _doc_序列化

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

    Java对象的序列化与反序列化

     序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码...

    3分钟读阿里Java手册: 序列化

    序列化:将数据对象转换为二进制的过程称之为序列化(Serialization) 反序列化:将二进制流恢复为数据对象称之为反序列化(Deserialization) 序列化方式 Java原生序列化 Java类通过实现Serializable接口实现该类对象的...

    json序列化jar包

    Flexjson is a lightweight library for serializing and deserializing Java objects into and from JSON. What's different about Flexjson is it's control over what gets serialized allowing both deep and ...

    xml的序列化与验证

    1、xml序列化的Java3种实现方法 1)Serializable和Externalizable接口Xstream框架2)Simple框架 3)Apache的AXIOM框架 2、XML验证文档的生成工具 trang.jar 3、利用XSD文件的XML3种验证方法 1)Dom4j的SAXValidator ...

    Serialization:Java中的序列化

    序列化Java中的序列化序列化是一种将对象的状态转换为字节流的机制。 反序列化是相反的过程,其中字节流用于在内存中重新创建实际的Java对象。 该机制用于持久化对象。

    Twitter 开源了一套全新的对象序列化方案.zip

    Twitter 开源了一套全新的对象序列化方案。.zip,Light-weight, fast framework for object serialization in Java, with Android support.

    B-java-serialization-with-jackson-homework:用Jackson进行Java序列化的家庭作业

    用Jackson作业进行Java序列化 用Jackson进行Java序列化的作业答案 问题1 通过使用Jackson注解或其他定制化手段 在于EventController中的两个接口,能够接收和返回如下格式的JSON: { " id " : " 1 " , " name " :...

    serialization-example:使用瞬态示例进行序列化和反序列化

    序列化和反序列化示例序列化是存储对象状态以便以后以其原始形式重新创建对象的概念。序列化http://localhost:8081/rest/serialize使用用户JSON的POST请求,例如{"name": "Sam", "dept", "Operation", "salary": ...

    kryo1.03.jar

    Fast, efficient Java serialization java序列化jar包

Global site tag (gtag.js) - Google Analytics