java的序列化

转载 2008年09月28日 10:27:00

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 FileOutputStream            

java 代码

  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();  

5、举例说明

java 代码

  1. import java.io.*;
  2.   
  3. public class  Box implements Serializable  
  4. {  
  5.     private int width;  
  6.     private int height;  
  7.   
  8.     public void setWidth(int width){  
  9.         this.width  = width;  
  10.     }  
  11.     public void setHeight(int height){  
  12.         this.height = height;  
  13.     }  
  14.   
  15.     public static void main(String[] args){  
  16.         Box myBox = new Box();  
  17.         myBox.setWidth(50);  
  18.         myBox.setHeight(30);  
  19.   
  20.         try{  
  21.             FileOutputStream fs = new FileOutputStream("foo.ser");  
  22.             ObjectOutputStream os =  new ObjectOutputStream(fs);  
  23.             os.writeObject(myBox);  
  24.             os.close();  
  25.         }catch(Exception ex){  
  26.             ex.printStackTrace();  
  27.         }  
  28.     }  
  29.       

6、相关注意事项

    a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

    b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

    c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:

        1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输  等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

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

Java序列化的几种方式以及序列化的作用

文章转载自: 本文着重讲解一下Java序列化的相关内容。如果对Java序列化感兴趣的同学可以研究一下。一.Java序列化的作用有的时候我们想要把一个Java对象变成字节流的形式传出去,有的时候我们想...
  • u012554102
  • u012554102
  • 2016年07月14日 00:00
  • 8441

几种Java序列化方式的实现

0、前言 本文主要对几种常见Java序列化方式进行实现。包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化。 1、Java原生序列化 Ja...
  • pistolove
  • pistolove
  • 2017年03月04日 11:01
  • 4204

java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化

- Transient关键字 Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想 用serialization机制来保...
  • u010156024
  • u010156024
  • 2015年09月14日 18:52
  • 3417

java 中的序列化是什么意思?有什么好处?

1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种...
  • h904380861
  • h904380861
  • 2014年02月18日 23:34
  • 2153

java笔试题: 序列化是什么:Java 序列化如何实现:

序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或...
  • hhhyyyjjj
  • hhhyyyjjj
  • 2014年09月03日 11:16
  • 1276

Java Serializable(序列化)的理解和总结、具体实现过程(转)

原文地址:http://www.apkbus.com/android-13576-1-1.html Java Serializable(序列化)的理解和总结、具体实现过程       ...
  • yhyqf
  • yhyqf
  • 2015年08月11日 10:17
  • 1699

java 中序列化的作用和好处

1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种...
  • u013161431
  • u013161431
  • 2017年06月21日 01:55
  • 204

java网络编程传递对象——序列化

昨天有人问我intent怎么传对象,我直接就回了句Extra,data,他说这都是键值对和数据,我当时就愣住了,回来网上一查才发现确实有传递对象的,包括打包传递和序列化传递,可惜之前没怎么用到过传递对...
  • SUN_song520
  • SUN_song520
  • 2016年01月28日 10:54
  • 2059

Java中的序列化Serialable高级详解

引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年02月08日 17:19
  • 30926

Java简述 java中的序列化是什么意思?有什么好处?

序列化就是一种用来处理对象流的机制
  • HZ_LIZX
  • HZ_LIZX
  • 2017年02月14日 15:39
  • 2009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java的序列化
举报原因:
原因补充:

(最多只允许输入30个字)