什么是序列化?在什么情况下将类序列化?

什么是序列化?在什么情况下将类序列化?
  
 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

是对象永久化的一种机制。
确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些保存下来的对象。这种情况下就要用到对象的序列化。

对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整性和可传递性。譬如通过网络传输,或者把一个对象保存成一个文件的时候,要实现序列化接口 。

时间: 2024-12-25 08:13:45

什么是序列化?在什么情况下将类序列化?的相关文章

15.5——继承情况下的类作用域

继承情况下的类作用域: 在继承的情况下,派生类的作用域嵌套在基类作用域的下. 先在派生类的作用域范围内查找,要是没找到,接着在外围的基类作用域中查找. 1. 名字查找在编译时发生 (1)对象,引用或指针的静态类型决定了其所能作用的成员,即使是当动态类型和静态类型可能不一样时也满足 (2)例如使用基类的指针就不能去访问派生类的成员. 2. 名字冲突与继承 (1)当基类和派生类的成员同名时,基类的成员在直接访问时将被屏蔽. (2)可以采用域作用符::来访问被屏蔽的成员. (3)最好不要有基类和派生类

C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

多级派生情况下派生类的构造函数

#include <iostream> #include<string> using namespace std; class Student//声明基类 { public://公用部分 Student(int n, string nam)//基类构造函数 { num=n; name=nam; } void display( )//输出基类数据成员 { cout<<"num:"<<num<<endl; cout<<

Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

在Objective-C 2.0中,有2种办法可以在不使用类继承的情况下,扩展已有类的实现.一种是分类(Category),另一种是类扩展(Class Extensions). 前者可以在没有已有类的源代码的情况下扩展类的实现.可以定义新的方法,但不能定义实例变量. 后者必须有已有类的源代码才能实现扩展.但是相比分类,类扩展还可以定义实例变量,并且隐藏这些信息.也就是说,类扩展是一种定义私有变量和私有方法的手段. Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

模型类序列化器

模型类序列化器 DRF提供了模型类序列化器: ModelSerializer 作用: 简化对应django模型类的序列化器的定义 ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成一系列字段 基于模型类自动为 Serializer 生成 validators,比如字段唯一的校验器 包含默认的 create() 和 update() 的实现 1. 定义 比如我们创建一个 DepartmentSerializer2 class DepartmentSeri

MessagePack Java Jackson 在不关闭输出流(output stream)的情况下序列化多变量

com.fasterxml.jackson.databind.ObjectMapper 在默认的情况下在写出输入后将会关闭输出流(output stream). 如果你希望序列化多值变量在同一个输出流的情况下,你不希望在输出完一个就关闭输出流,你可以设置  JsonGenerator.Feature.AUTO_CLOSE_TARGET 参数为 False. 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-

Jackson高并发情况下,产生阻塞

情况:在高并发情况下,查看线程栈信息,有大量的线程BLOCKED. 从线程栈得知,线程栈中出现了阻塞,锁在了com.fasterxml.jackson.databind.ser.SerializerCache.untypedValueSerializer(SerializerCache.java:74)上. 1 "catalina-exec-1453" #1525 daemon prio=5 os_prio=0 tid=0x00007f1010098800 nid=0x2675 wai

异常情况下的生命周期分析

这里所说的异常主要是分为以下这在两种情况下的异常: 情况1.资源相关的系统配置发生改变Activity被杀死并被杀死重新创建Activity 情况2.资源内存不足导致低优先级的Activity被杀死 情况一具体: 那最简单的加载图片资源文件的机制来说,我们将图片放进drawable目录下,开发时为了兼容不同的设备,可能放的不只放在这一个目录中,还有drawable-mdpi, drawable-hdpi这些目录中,当程序启动的时候会根据设备的情况进行加载合适的图片资源,比如手机的横屏向竖屏进行切