第六节:流上下文

前面讲过,一组序列化好的对象可以有许多目的地:同一个进程、同一台机器不同进程、不同机器上的不同进程等。在一些比较少见的情况下,一个对象可能想知道它要在什么地方反序列化,从而已不同的方式生成它的状态。例如,对一个包装了Windows信号量对象的一个对象,如果它知道要反序列化到同一个进程中,就可能决定序列化它的内核句柄,这是因为内核句柄在一个进程中有效。然而,如果它知道要反序列化到同一台机器的不同进程中,就可能决定对信号量的字符串名称进行序列化。最后,如果对象知道他要反序列化到一台不同的机器上的一个进程中,就可能抛出一个异常,因为信号量只在一台机器内有效。

本章提到的大量方法都接受一个StreamingContext。StreamingContext结构是一个非常简单的值类型,它只提供了两个公共只读属性。

成员名称          成员类型          说明

State                  StreamingContextStates  一组位标志,指定要序列化/反序列化的对象的来源或目的地

Context       Object        对一个对象的引用,对象包含了用户希望的任何上下文

接受一个StreamingContext结构的方法能检查State属性的位标志,判断要序列化/反序列化的对象的来源或目的地。

//     指定源或目标上下文是同一计算机上的另外一个进程。

CrossProcess = 1,

//

// 摘要:

//     指定源或目标上下文是另外一台计算机。

CrossMachine = 2,

//

// 摘要:

//     指定源或目标上下文是文件。用户可以假定文件的持续时间长于创建它们的进程,并且文件以特定方式将对象序列化,此方式不会使反序列化进程要求访问当前进程中的任何数据。

File = 4,

//

// 摘要:

//     指定源或目的上下文是持续的存储区,它可以包括数据库、文件或其他后备存储区。用户可以假定持续数据的持续时间长于创建数据的进程,并且持续数据以特定方式将对象序列化,此方式不会使反序列化进程要求访问当前进程中的任何数据。

Persistence = 8,

//

// 摘要:

//     指定数据在未知位置的上下文中进行远程处理。用户无法假定它是否在同一台计算机上。

Remoting = 16,

//

// 摘要:

//     指定序列化上下文未知。

Other = 32,

//

// 摘要:

//     指定对象图形正在进行克隆。用户可以假定克隆图形将继续在同一进程中存在,可以安全地访问句柄或其他对非托管资源的引用。

Clone = 64,

//

// 摘要:

//     指定源或目标上下文是另外一个 AppDomain。(有关 AppDomain 的说明,请参见 Application Domains)。

CrossAppDomain = 128,

//

// 摘要:

//     指定可以向其他任何上下文传输(或从其他任何上下文接收)序列化数据。

All = 255,

在知道了如何获取这些信息后,接着让我们讨论如何设置他们。IFormatter接口(同时又BinaryFormatter和SoapFormatter类型实现)定义了一个StreamingContext类型的属性,名为Context。构造一个格式化器时,格式化器会初始化它的Context属性,将StreamingContextStates设为All,将对额外状态对象的引用设为null。

格式化器构造好之后,就可以使用任何StreamingContextStates为标志来构造一个StreamingContext结构,并可选择传递一个对象引用(对象中包含你需要的任何额外的上下文信息)。现在在调用格式化器的Serialize或Deserialize方法之前,你唯一要做的就是讲格式化器的Context属性设为这个新的StreamingContext对象。

时间: 2024-08-07 21:20:32

第六节:流上下文的相关文章

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

centos mysql 实战 第六节课 字符集

centos mysql 实战 第六节课    字符集 一定要研究清楚mysql安装脚本 字符集 乱码数据迁移1. 理解字符集怎么会事2. 不同的字符集进行转换 什么是字符集gbk , utf8 gb2312 latin1 一套符号编码规则 字符串都必须有相应的字符集,除了二进制没有字符集 校验字符集的概念流式传输 多字节latin1 单字节gbk 2字节utf8 3字节校验字符集的概念, 字为单位归类的方法,就是3类xxx_bin 以二进制形式存储区分大小写 SHOW CHARACTER SE

Linux学习第六节课-用户、组合权限

Linux学习第六节课 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 三十四.安全3A 认证Authentication 授权Authorization 审计Accounting 三十五.用户和组的配置文件 /etc/pas

第三百一十六节,Django框架,中间件

第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下. settings模块中 #中间件 MIDDLEWARE = [ 'django.middleware.security.Securit

第六节课:元组和集合

第六节课:元组合集合 首先,看一下英文对应词汇“迭代”->"iteration"->(computer science) a single execution of a set of instructions that are to be repeated; "the solution took hundreds of iterations" “递归”->“recurse"->To execute a procedure recur

centos mysql 优化 第十六节课

centos mysql  优化  第十六节课 f

NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译

NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML第一章第三节Creating class hierarchy mappings第一章第四节Mapping a one-to-many relationship第一章第五节Setting up a base entity class Handling versioning and concurrency

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台-创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为app_operation的用户操作APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime i

第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承

第三百八十六节,Django+Xadmin打造上线标准的在线教育平台-HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页面返回给浏览器 一般母板里都是写的一个网页里不变的地方,也就是通用的地方,被继承页(访问页)都是每个页面不同的地方,也就是将页面不同的地方引入到母板组合成一个新页面返回浏览器 母板里一般都是网页的.头部.底部.头部底部css.头部底部js 被继承页(访问页)里一般都是新内容,新内容的css和js 母