Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。这一点甚至在跨网络的环境下也是如此,这就意味着序列化机制能自动补偿操作系统方面的差异。也就是说,你可以在Windows机器上创键一个对象,序列化之后,再通过网络传到Unix机器上,然后在那里进行重建。你不用担心在不同的平台上数据是怎样表示的,byte顺序怎样,或者别的什么细节。
对象序列化本身就非常有趣,因为它能让你实现"轻量级的persistence(lightweight persistence)"。所谓persistence(持久化)是指,对象的生命周期不是由程序是否运行决定的;在程序的两次调用之间对象仍然还活着。通过"将做过序列化处理的对象写入磁盘,等到程序再次运行的时候再把它读出来",你可以达到persistence的效果。之所以说"轻量级",是因为你不能用像"persistent"这样的关键词来直接定义一个对象,然后让系统去处理所有细节(虽然将来有可能会这样)。相反,你必须明确地进行序列化(serialize)和解序列化(deserialize)。如果你需要更为正式的persistence功能,可以考虑Java Data Object( 简称是JDO)或Hibernate之类的工具。
之所以要在语言里加入对象序列化是因为要用它来实现两个重要的功能。Java的远程方法调用(Remote Method Invocation简称RMI)能让你像调用自己机器上的对象那样去调用其它机器上的对象。当你向远程对象传递消息的时候,就需通过对象序列化来传送参数和返回值了。
对JavaBean来说,对象序列化也是必不可少的。Bean的状态信息通常是在设计时配置的。这些状态信息必须保存起来,供程序启动的时候用;对象序列化就负责这个工作。
序列化一个对象还是比较简单的,只要让它实现Serializable接口就行了(这是一个"标记接口(tagging interface)",没有任何方法)。但是,当语言引入序列化概念之后,它的很多标准类库的类,包括primitive的wrapper类,所有的容器类,以及别的很多类,都会相应地发生改变。甚至连Class对象都会被序列化。
对象序列化最聪明的一点是,它不仅能保存对象的副本,而且还会跟踪对象里面的reference,把它所引用的对象也保存起来,然后再继续跟踪那些对象的reference,以此类推。这种情形常被称为"单个对象所联结的'对象网'"。这个机制所涵盖的范围不仅包括对象的成员数据,而且还包含数组里面的reference。如果你要自己实现对象序列化的话,那么编写跟踪这些链接的程序将会是一件非常痛苦的任务。但是,Java的对象序列化就能精确无误地做到这一点,毫无疑问,它的遍历算法是做过优化的。
要想序列化对象,你必须先创建一个OutputStream,然后把它嵌进ObjectOutputStream。这时,你就能用writeObject( )方法把对象写入OutputStream了。读的时候,你得把InputStream嵌到ObjectInputStream里面,然后再调用readObject( )方法。不过这样读出来的,只是一个Object的reference,因此在用之前,还得先下传。
Object serialization的定义:
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
serialization不但可以在本机做,而且可以经由网络操作(RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念)等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。
Object serialization主要用来支持2种主要的特性:
1、Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。
2、Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
分享到:
相关推荐
- 如果你需要在不同的Java平台上共享数据,那么Serializable是更好的选择,因为它遵循Java的标准序列化协议。 总结来说,Serializable和Parcelable各有优劣,选择哪种取决于具体的应用场景和性能需求。在大多数情况...
在Java中,如果一个类实现了Serializable接口,那么该类的对象就可以被序列化。序列化的目的是为了保存对象的状态以便后续使用或在网络上传输。 Hessian,由Caucho Technology开发,是一种二进制的序列化格式。相比...
Java序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。相反,反序列化则是在适当的时候把这个流转换回原对象的过程。当应用程序接收来自不受信任源的数据并进行反序列化时,可能触发安全漏洞。例如,...
Java序列化和反序列化是Java开发中常见且重要的概念,它们主要用于对象的状态持久化以及在不同系统间传递数据。本库专注于将Java对象转换为JSON格式,这在Web服务、API开发、数据存储和传输等方面都有广泛的应用。...
在Java中,将Java对象的数据封装成XML格式的字符串,通常涉及到对象序列化的过程。对象序列化是将对象的状态转换为字节流,以便存储或在网络上传输。这个过程可以通过实现`java.io.Serializable`接口来完成。反序列...
Java序列化是一项核心功能,它允许程序员将对象的状态转化为字节流的形式,从而实现对象的持久化存储或者在网络之间进行传递。这对于诸如远程方法调用(RMI)、分布式计算、对象存储以及缓存管理等场景至关重要。下面...
- **对象序列化**:通过实现Serializable接口,可以将Java对象转换为字节流,便于存储和网络传输。 7. **网络编程** - **Socket编程**:Java提供了Socket和ServerSocket类进行网络通信,建立TCP连接。 - **URL和...
Java提供了Serializable接口,实现了这个接口的对象可以通过ObjectOutputStream进行序列化,然后通过ObjectInputStream在另一端进行反序列化,从而实现数据的交换。 此外,为了提升用户体验,聊天器可能还会涉及到...
### Java序列化的秘密 #### 为什么需要序列化 在探讨序列化之前,我们需要理解序列化产生的背景及其必要性。简而言之,Java程序本质上是由进程和内存构成的系统,在这个系统中,进程根据定义好的类生成一系列实例...
Java的对象永续之道,主要探讨了Java中对象的持久化技术——序列化(serialization)的原理与实践。在计算机科学中,对象的持久性是指将内存中的数据转换为持久存储形式,如硬盘上的文件,以便在系统重启后仍能保留...
2. **数据序列化与反序列化**:为了持久化雇员对象,JAVA提供了`Serializable`接口。实现这个接口的对象可以通过`ObjectOutputStream`写入文件,然后通过`ObjectInputStream`读取。这样可以将对象的状态保存到磁盘并...
本文主要讨论Android特有的序列化方式——`Parcelable`接口,以及它与Java标准序列化`Serializable`接口的区别。 `Parcelable`接口是Android框架提供的一种高效的数据序列化方式,主要用于那些需要频繁在内存、...
Java为实现对象持久化提供了一种简单而强大的机制——序列化(Serialization)。通过实现`Serializable`接口,开发者几乎无需编写额外的代码就可以让对象支持序列化。序列化过程通常包括两个方面: 1. **序列化**: ...
在处理Java对象与Redis之间的数据交互时,我们需要将Java对象转换为可存储的格式,然后在读取时再反序列化回Java对象。这个过程就涉及到了序列化和反序列化。本文主要探讨四种常见的序列化工具——JDK自带的序列化、...
Java提供了一种机制,允许对象实现 `Serializable` 接口后自动完成序列化过程。对于需要更精确控制序列化的对象,可以实现 `Externalizable` 接口。 - **`Serializable` 接口**:这是一个标记接口,没有方法定义。...
Java序列化是将对象的状态转换为字节流的过程,以便可以存储在磁盘上或者在网络上传输。要使一个类可序列化,你需要让该类实现`java.io.Serializable`接口。例如: ```java public class MyObject implements ...
Java反序列化漏洞利用是Java安全领域中的一个重要话题,它涉及到程序执行流程中的一个环节——序列化与反序列化。序列化是将对象的状态转换为字节流的过程,便于存储或网络传输;反序列化则是将字节流恢复为对象的...
这个类实现了Serializable接口,确保消息能在网络间进行序列化传输。 - **代码②**:MessageType枚举类定义了消息类型的常量,例如LOGIN_MESSAGE(登录消息)和TEXT_MESSAGE(文本消息),便于在程序中识别和处理不同...
本压缩包文件名为"jboss、weblogic、websphere等序列化漏洞检测.rar",显然关注的是针对这些服务器的特定类型安全威胁——序列化漏洞。下面将详细解释序列化漏洞的概念,它们为何危险,以及如何检测和防范。 序列化...