`
sooxin
  • 浏览: 255753 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java中序列化的好处及意义

    博客分类:
  • J2EE
 
阅读更多
1、序列化是干什么的?

  简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,
 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化

  当你想把的内存中的对象保存到一个文件中或者数据库中时候;
  当你想用序列化在网络上传送对象的时候;
  当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?

  在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
  
1 Foo myFoo = new Foo();
2 myFoo .setWidth(37);
3 myFoo.setHeight(70);
  当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它
  从文件中读出来,重新在堆中创建原来的对象。
  保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对象。
1 FileOutputStream fs = new FileOutputStream("foo.ser");
2 ObjectOutputStream os = new ObjectOutputStream(fs);
3 os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
Make a FileOutputStream
1 FileOutputStream fs = new FileOutputStream("foo.ser");
2
Make a ObjectOutputStream
ObjectOutputStream os = new ObjectOutputStream(fs);
write the object

write the object
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
close the ObjectOutputStream java 代码 os.close();
5、举例说明
import java.io.*;

public class Box implements Serializable {
     private int width;
     private int height;
        public void setWidth(int width){
            this.width = width;
        }
        public void setHeight(int height){
            this.height = height;
        }
        public static void main(String[] args){
           Box myBox = new Box();
           myBox.setWidth(50);
           myBox.setHeight(30);
           try{
                    FileOutputStream fs = new FileOutputStream("foo.ser");    
                    ObjectOutputStream os = new ObjectOutputStream(fs);
                    os.writeObject(myBox);
                    os.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
         }
}                      
  

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

把一个对象完全转成字节序列,方便传输。
就像你寄一箱饼干,因为体积太大,就全压成粉末紧紧地一包寄出去,这就是序列化的作用。
只不过JAVA的序列化是可以完全还原的。
分享到:
评论

相关推荐

    java serializable 序列化与反序列化

    **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...

    关于 Java 对象序列化您不知道的 5 件事

    在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序至关重要。 1. **序列化的意义与用途** Java对象序列化不仅用于持久化对象状态,还能在网络传输中...

    java中的序列化与反序列化

    Java序列化机制的优点在于它提供了一种标准的方式来处理对象的持久化和在网络间的传输。然而,序列化也存在安全风险,比如序列化可能导致远程代码执行攻击。因此,对于敏感信息或复杂对象结构,应谨慎使用序列化,并...

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其...对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    Java序列化和反序列化

    ### Java序列化与反序列化的深入解析 #### 序列化的功能与意义 序列化是Java编程语言中的一项核心功能,其主要目的是将对象的状态转换为可以存储或传输的格式,便于持久化保存或网络传输。序列化并不涉及对象的...

    Java对象序列化

    1. **魔数**:标识文件为Java序列化文件,固定为`ACED`。 2. **序列化协议版本号**:目前常用的版本号为`0005`。 3. **对象类型标志**:一个字节用于表示对象类型。例如`0x73`表示普通Java对象。 4. **类或引用标志*...

    java反序列化终极测试工具.zip

    Java反序列化是一种将之前序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种方式。在软件开发中,特别是在服务器端应用中,反序列化常常用于在网络传输或存储后恢复对象的状态。然而,如果这个过程...

    影院管理系统(序列化)

    在IT行业中,序列化是一个重要的概念,特别是在对象持久化、网络传输或数据存储等领域。在这个“影院管理系统”项目中,序列化技术被用来处理和存储系统中的对象状态,确保数据能够在不同时间点或者不同环境之间保持...

    Java反序列化漏洞探析及其修复方法研究.pdf

    Java反序列化漏洞的产生原理主要是在对象反序列化过程中,由于程序对输入数据控制不严,可能会产生非预期的对象,进而可能带来任意代码执行的问题。攻击者可以利用这一漏洞,通过精心构造的数据序列化后,由应用程序...

    探索Java序列化与反序列化的奥秘:数据持久化的桥梁

    #### Java序列化的重要性及应用场景 Java序列化是一项核心功能,它允许程序员将对象的状态转化为字节流的形式,从而实现对象的持久化存储或者在网络之间进行传递。这对于诸如远程方法调用(RMI)、分布式计算、对象...

    Java序列化与反序列化<转>

    Java序列化与反序列化是Java编程中一个重要的概念,它允许我们将对象的状态转换为字节流,以便存储或在网络中传输。这个过程被称为序列化,而将字节流恢复为对象的过程则称为反序列化。Java提供了一个内置的机制来...

    Java序列化(Serializable)与反序列化__1.docx

    Java序列化(Serializable)是Java平台提供的一种持久化机制,允许将对象的状态转换为字节流,以便存储到磁盘、数据库中,或者在网络上传输。这一过程被称为对象的序列化。反之,将字节流恢复为原来的对象状态称为反...

    Json反序列化

    JSON(JavaScript Object ...了解和掌握JSON反序列化的原理、常见库以及注意事项,对于提升开发效率和保证代码质量具有积极意义。在实际工作中,应根据项目需求选择合适的反序列化库,并编写测试用例确保其正确性。

    Java序列化(Serializable)与反序列化_.docx

    ### Java序列化(Serializable)与反序列化详解 #### 序列化概念与应用场景 序列化是指将程序中的对象转换为一系列字节序列的过程,主要用于保存对象的状态以便将来使用或者在网络之间传输对象。Java提供了内置的...

    翻译_Java对象的序列化

    Java对象的序列化是Java平台提供的一种将对象转化为字节序列的能力,以便于存储或在网络中传输。这个特性使得任何实现了Serializable接口的Java对象都可以被转换成一系列的字节,之后这些字节可以完全恢复,重新生成...

    java序列化

    Java序列化是Java平台提供的一种持久化对象状态的机制,它可以将对象转换成字节流,以便存储到磁盘上,或者在网络中进行传输。这一过程被称为对象的序列化。相反,将字节流还原为原来的对象的过程叫做反序列化。 ...

    java序列化和反序列化,面试必备

    Java序列化和反序列化是Java开发中常见且重要的概念,尤其在面试中常常被问及。序列化是指将一个Java对象转化为字节序列的过程,这样可以将对象的状态持久化到磁盘上或者在网络中进行传输。反序列化则是相反的过程,...

    系列化和反序列化的一个文砀

    在Java中,我们可以使用`java.io.Serializable`接口来标记一个类是可序列化的,然后通过`ObjectOutputStream`将对象写入到文件或网络流中。在Python中,有多种序列化库如pickle、json等,它们提供了方便的方法将...

    Java反序列化漏洞利用工具的实现.pdf

    Java反序列化漏洞的形成原因是,当Java应用对不可信数据进行反序列化处理时,攻击者可以构造恶意输入数据,导致反序列化过程中产生非预期的对象,这可能引起任意代码执行的安全漏洞。2015年11月,由FoxGloveSecurity...

    java中对象的序列化与反序列化深入讲解

    Java中的对象序列化和反序列化是Java标准库提供的用于持久化对象状态的重要特性。对象序列化是指将Java对象转换为字节序列的过程,而反序列化则是将这些字节序列恢复为原始对象的过程。这一过程对于数据的存储、网络...

Global site tag (gtag.js) - Google Analytics