`
yollywu
  • 浏览: 17745 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

基础回顾(1)---对象序列化(引)

阅读更多
序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。
一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
二: java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深复制”,即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
从上面的叙述中,我们知道了对象序列化是java编程中的必备武器,那么让我们从基础开始,好好学习一下它的机制和用法。

java 序列化比较简单,通常不需要编写保存和恢复对象状态的定制代码。实现java.io.Serializable接口的类对象可以转换成字节流或从字节流恢复,不需要在类中增加任何代码。只有极少数情况下才需要定制代码保存或恢复对象状态。这里要注意:不是每个类都可序列化,有些类是不能序列化的,例如涉及线程的类与特定JVM有非常复杂的关系。

序列化机制:

序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过程与字节流连接,包括对象类型和版本信息。反序列化时, JVM用头信息生成对象实例,然后将对象字节流中的数据复制到对象数据成员中。下面我们分两大部分来阐述:


处理对象流:
(序列化过程和反序列化过程)

java.io包有两个序列化对象的类。ObjectOutputStream负责将对象写入字节流,ObjectInputStream从字节流重构对象。
我们先了解ObjectOutputStream类吧。ObjectOutputStream类扩展DataOutput接口。
writeObject ()方法是最重要的方法,用于对象序列化。如果对象包含其他对象的引用,则writeObject()方法递归序列化这些对象。每个 ObjectOutputStream维护序列化的对象引用表,防止发送同一对象的多个拷贝。(这点很重要)由于writeObject()可以序列化整组交叉引用的对象,因此同一ObjectOutputStream实例可能不小心被请求序列化同一对象。这时,进行反引用序列化,而不是再次写入对象字节流。
下面,让我们从例子中来了解ObjectOutputStream这个类吧。

// 序列化 today's date 到一个文件中.    FileOutputStream f = new FileOutputStream("
分享到:
评论

相关推荐

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop ...

    Odin - Inspector and Serialize游戏对象序列化插件.rar

    《Odin - Inspector and Serializer游戏对象序列化插件》是一款专为Unity引擎设计的强大工具,旨在优化游戏对象的序列化过程以及提供高级的Inspector视图。这个插件极大地提升了开发效率,让开发者能够更轻松地管理...

    json-lib 序列化和反序列化

    1. **序列化**: - 使用`json-lib`,你可以通过`net.sf.json.JSONObject`类的静态方法`fromObject()`将Java对象转化为JSON格式。例如,如果你有一个Java对象`Person`,你可以这样序列化它: ```java Person ...

    C#对象序列化与反序列化

    ##### (1).NET支持对象序列化的几种方式 .NET框架提供了多种序列化机制,它们各自有不同的应用场景和特点。 - **二进制序列化**: - **定义**:二进制序列化是一种快速且高效的序列化方式,它可以将对象转换成二...

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

    Java对象的序列化和反序列化是Java编程中一项...总结,Java对象的序列化和反序列化是Java编程中的基础概念,它涉及到数据持久化、网络通信等多个方面。理解并熟练运用这一技术,能够帮助开发者更有效地管理和传递数据。

    java对象序列化和反序列化

    综上,Java对象序列化和反序列化是Java开发中的基础技能,它们在数据持久化、网络通信等方面发挥着关键作用。了解并掌握这些知识,能够帮助开发者更好地设计和实现各种功能。在实际应用中,需要注意安全性和版本兼容...

    Android-Android上的Java对象反序列化

    1. **序列化**: 序列化是将Java对象转换为字节流的过程,以便于存储或传输。通过实现`java.io.Serializable`接口,一个Java对象可以获得序列化的能力。序列化不仅可以保存对象的状态,还可以在需要时恢复这些状态。 ...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    本主题将深入探讨如何在Windows Forms(WF)环境中,利用C#语言进行对象的直接保存与读取,以及通过对象序列化和反序列化的方式实现对象的保存与恢复。 首先,我们来理解什么是对象的直接保存与读取。在C#中,可以...

    tomcat-7.0.47-memcached-各种序列化策略-session共享

    1. **Java序列化**:默认的序列化方式,简单易用,但序列化后的数据量大,且性能较低。 2. **JSON序列化**:例如使用Jackson或Gson,序列化后的数据更紧凑,解析速度快,但需要额外的库支持,并且不能处理所有Java...

    论文研究-一个基于JSON的对象序列化算法.pdf

    提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。

    05.C# 知识回顾 - 序列化.pdf

    1. 二进制序列化:采用二进制编码对对象进行序列化,生成的字节流精简,可以提高性能。这种序列化方式适合用于文件存储和socket通信,因为它具有较快的处理速度和较小的体积。 2. XML序列化:XML序列化生成的字节流...

    54-IO流(对象的序列化).avi

    54-IO流(对象的序列化).avi

    apache-tomcat-7.0.47-memcached-各种序列化策略-session共享

    6. **apache-tomcat-7.0.47-memcached-java-session共享.rar**:最基础的Java序列化,使用Java内置的ObjectOutputStream和ObjectInputStream进行对象的序列化和反序列化。虽然简单,但序列化的对象通常体积较大,不...

    ShiroExp-1.3.1-all.jar shiro反序列化检测工具

    ShiroExp-1.3.1-all.jar shiro反序列化检测工具 我这里是用于搭建攻防演练演示环境用

    wpf序列化代码

    在.NET框架中,C#提供了一种强大的机制来处理对象的序列化,使得对象的状态能够被转换为可以存储或传输的数据格式。WPF(Windows Presentation Foundation)是.NET Framework的一部分,它是一个用于构建桌面应用程序...

    C#-JSON序列化和反序列化辅助类

    C#-JSON序列化和反序列化辅助类

    Python实现CEEMDAN-CNN-BILSTM-attention时间序列预测(完整源码和数据)

    1.Python实现CEEMDAN-CNN-BILSTM-attention时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可...

    Visual C++中对象的序列化与文件I-O研究.rar_c++对象序列化_对象序列化_序列化

    一、C++对象序列化的基础 对象序列化的目标是将对象的状态转换成字节流,以便保存到磁盘或者网络上。这通常包括读取和写入对象的成员变量。在C++中,可以使用`和`>>`运算符重载来进行流操作。通过定义友元函数或成员...

Global site tag (gtag.js) - Google Analytics