存档

2009年4月 的存档

Oracle 8i.9i.10g.11g 不同版本的比较

2009年4月25日 admin 没有评论

Oracle 9i8i多了哪些新特性?

简要说:
9i
更易于管理。
详细说:
并发集群,8i OPS升级为9i RAC8i结点间用硬盘交换信息,9i结点间采用高速网线的缓存熔合(Cache Fusion)技术交换信息,交换速度提高100倍以上。
9i
可以在线修改内核参数和内存分配,8i不行。
数据文件和表空间管理,8i手工管理,9i自动管理。
9i
8i增强了对ANSI SQL99的支持。
9i
8i增强了故障后的快速恢复(Fast-start)
8i
只支持物理备份(physical backup)数据库,9i还增加了支持逻辑备份(logical backup)数据库,使备份数据库除了作为主数据库的镜像外,还可以提供其他数据服务.

Oracle 10g9i多了哪些新特性?

简要说:
10g支持网格(Grid),支持自动管理(Automatic Management)。

详细说:

10g的g是”Grid”缩写,支持网格计算,即,多台结点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个网格中均衡(Load Balance),按需增删结点,避免单点故障(Single Point of Faliure)。
安装容易,安装工作量比9i减少了一半。
新增基于浏览器的企业管理器(Enterprise Manager)。

自动存储管理(ASM),增删硬盘不再需要操作系统管理员设置的镜像、负载均衡、物理卷、逻辑卷、分区、文件系统,只要打一条Oracle命令,ASM会自动管理增加或删除的硬盘。
内存自动化,根据需要自动分配和释放系统内存。
SQL性能调整自动化。
免费提供基于浏览器的小应用开发工具Oracle Application Express(原名HTML DB),支持10g和9i R2。
快速纠正人为错误的闪回(Flashback)查询和恢复,可以恢复数据库、表甚至记录。
数据泵(Data Pump)高速导入、导出数据,比传统方法导出速度快两倍以上,导入速度快15–45倍。
精细审计(Fine-Grained Auditing),记录一切对敏感数据的操作。
存储数据的表空间(Tablespace)跨平台复制,极大的提高数据仓库加载速度。
流(Streams)复制,实现低系统消耗、双向(double-direction)、断点续传(resume from break point)、跨平台(cross platform)、跨数据源的复杂复制。
容灾的数据卫士(Data Guard)增加了逻辑备份功能,备份数据库日常可以运行于只读状态,充分利用备份数据库。
支持许多新EE选件,加强数据库内部管理的“Database Vault”,数据库活动的审计的(Audit Vault),数据仓库构建高级功能(Warehouse Builder Enterprise ETL, Warehouse Builder Data Quality).

Oracle 11g10g多了哪些新特性?

11 g 扩展了 Oracle 独家具有的提供网格计算优势的功能,您可以利用它来提高用户服务水平、减少停机时间以及更加有效地利用 IT资源,同时还可以增强全天候业务应用程序的性能、可伸缩性和安全性。

利用真正应用测试(RAT)尽量降低更改的风险

11 g降低了数据库升级以及其他硬件和操作系统更改的成本,显著简化了更改前后的系统测试以便您可以识别和解决问题。例如:

利用 Database Replay,您可以在数据库级别轻松捕获实际的生产负载并在您的测试系统上重新播放,这样您可以全面测试系统更改(包括关键的并发特性)的影响。

SQL Performance Analyzer识别结构化查询语言 ) SQL(执行计划更改和性能回退。然后,可以使用 SQL Tuning Advisor解决识别的问题,方法是还原到原始的执行计划或进一步优化。

利用管理自动化提高 DBA 效率

Oracle 数据库 11 g继续致力于(从 Oracle9i数据库开始一直到 Oracle 数据库10 g)显著简化和完全自动化 DBA 任务。 Oracle数据库11 g中的新功能包括:

利用自学功能自动进行 SQL 优化系统全局区(SGA)和程序全局区( PGA)的内存缓存区的自动、统一调整新的 advisor用于分区、数据恢复、流性能和空间管理针对自动数据库诊断监视器 (ADDM)的增强,能够提供 Oracle 真正应用集群 (Oracle RAC)环境中的更好的性能全局视图以及改进的性能比较分析功能。

利用故障诊断快速解决问题

Oracle 数据库 11 g中新增的故障诊断功能使客户在发生错误后捕获 Oracle

Support所需的数据变得极为简单。这可以加速问题的解决,减少客户重现问题的需要。

尽量降低停机成本

通过 Oracle Data Guard快速恢复数据

Oracle Data Guard在本地和远程服务器之间协调数据库的维护和同步以便从灾难或站点故障快速恢复。 Oracle数据库11 g提供了大量显著的 Oracle Data Guard增强,包括

可以在物理备用系统上运行实时查询用于报表和其他目的

可以通过将物理备用系统暂时转换为逻辑备用系统执行联机的、滚动的数据库升级

..支持测试环境的快照备用系统

此外,物理和逻辑备用的性能都有提高。逻辑备用现在支持可扩展标记语言(XML)类型字符大型对象 (CLOB)数据类型和透明的数据加密。现在支持自动的、快速启动的故障切换以支持异步传输。

Oracle 数据库 11 g提供了几个针对自动存储管理的重要的高可用性增强,

包括:

..支持滚动升级

..自动坏块检测和修复

..快速镜像重新同步,该功能可以有效地重新同步存储网络连接性暂时丢失时自动存储管理镜像的存储阵列

自动存储管理的性能增强使得大型数据库可以更快地打开并减少 SGA 内存消耗。这些增强还允许 DBA增加存储分配单元大小以加快大型序列输入/输出 (I/O)

显著增加正常运行时间

Oracle数据库11 g使您可以应用很多一次性数据库补丁(包括诊断补丁),而没有停机时间。新的数据恢复 advisor通过快速识别故障根本原因、为 DBA提供可用的恢复选项,极大地减少了停机时间,在某些情况下,还通过“自我恢复”机制自动纠正问题。

Oracle 数据库 11 g还有其他高性能提高,包括

..自动编译数据库中的 PL/SQL Java

..更快的触发器,包括更加有效地调用每行触发器

..更快的简单 SQL 操作

..更快的 Oracle Data Guard Oracle Streams 复制

..与网络文件系统( NFS 存储设备更快、更可靠的直接连接

..更快的升级

..大型文件更快的备份/还原

..更快的备份压缩

Oracle 数据库 11 g包括大量新的 ILM特性,例如

..新的分区功能,包括

.按父/子引用分区

.按虚拟列分区

Oracle数据库11 g还具有带 Oracle闪回数据归档的 Total Recall,使您可以在选定的表中查询以前的数据,从而提供了一种简单实用的向数据中添加时间维度的方法以便于更改跟踪、 ILM、审计和合规。

其他高可用性增强

Oracle 数据库 11g还有其他高可用性增强,包括:

Oracle闪回事务查询,提供带其他相关事务更改的流氓事务的按钮更改

具有更多可传输选项的增强的平台移植和数据移动,包括可传输分区、

模式和跨平台数据库

Oracle恢复管理器 (RMAN)支持 Windows Volume Shadow Copy

Service ( VSS )快照,从而实现与 Windows备份更紧密的集成

优化性能和可靠性

合规、法律取证以及整合数据仓库的趋势导致数据库的大小每两年就会增加

两倍,这极大地影响了大型数据库的存储成本和性能、可靠性以及可管理性

Oracle 数据库 11 g使组织可以使用低成本的服务器和模块化的存储器轻

松伸缩大型的事务和数据仓库系统并提供快速的全天候数据访问。 Oracle

据库11 g提供新的创新特性以进一步提高要求极严格的环境的性能和可伸

缩性。

利用 SecureFiles安全地存储您的所有数据

SecureFiles Oracle用于在数据库中存储大型对象) LOB (

(例如图像、大型文本对象或包括 XML、医学成像以及地理空间栅格对象在内的高级数据类型)的下一代产品。 SecureFiles提供能够完全与文件系统相媲美的卓越性能。此外,它还提供高级功能,例如智能压缩、透明加密以及透明的重复

删除。

通过联机事务处理压缩提高性能并尽量降低存储成本

Oracle 数据库 11 g支持联机事务处理 (OLAP)应用程序中常用的更新、

插入和删除操作的数据压缩。以前的 Oracle数据库版本支持数据仓库应用

程序常用的批量数据加载操作的压缩。 Oracle 数据库 11 g OLTP表压缩通

过更加高效地使用内存来缓存数据以及减少表扫描的 I/O提高了数据库性能

。利用 OLTP表压缩,您可以利用最小的处理开销达到 2 3倍的压缩

比。

Popularity: 16% [?]

IT对联汇总

2009年4月24日 admin 没有评论

===============================IT大龄青年篇

今有同仁问到,三十以后咋过。恰巧心情郁闷,发上几句牢骚。
本人技术起步,起初觉得挺酷。如今回头一看,寂寞凄惨无助。
自小练文习武,觉得是个人物。没想老大不小,仍然没人光顾。
少年暗恋对象,早已嫁作人妇。那天遇见街头,孩子叫我叔叔。
周围女人不少,全是大姑大嫂。偶然有个例外,也是歪瓜劣枣。
有人看我可怜,就想帮我去找。哪怕废旧材料,或许我也想要。
我若宁死不从,就被说成眼高。只好硬着头皮,前去看看罢了。
谁知世事难料,她们也都很挑。没钱没房没车,休想前来骚扰。
心中百思不解,为何世道变了。自幼所受熏陶,全都变成玩笑。
辛苦努力工作,到头全都白做。溜须拍马奉承,却能混得不错。
他们在家享福,我在宿舍苦读。哪知忙了几年,还是该我孤独。
技术几年有余,心中还是糊涂。为何鲜花朵朵,都与牛粪结果。
十一反省七日,一点事情没做。这以后的日子,我该如何去过?

===============================开发客户篇
一把鼻涕一把泪,投身IT英雄无畏。
西装革履貌似高贵,其实生活极其乏味。
为了生计吃苦受累,鞍前马后终日疲惫。
为了中标几乎陪睡,点头哈腰就差下跪。
日不能息夜不能寐,甲方一叫立马到位。
屁大点事不敢得罪,一年到头不离岗位。
身心交碎无处流泪。逢年过节家人难会。
追讨欠款让人崩溃。开发客户经常喝醉。
不伤感情只好伤胃。工资不高还装富贵。
拉拢行贿经常破费。十毒俱全就差报废。
稍不留神就得犯罪。抛家舍业愧对长辈。
身在其中方知其味。不敢奢望社会地位,全靠傻傻自我陶醉…

===============================
加入IT吃苦受累,
摸爬滚打终日疲惫,
市场信息必须到位,
一日三餐时间不对,
屁大点事反复开会,
逢年过节值班应对,
一时一刻不敢离位,
各种报表让人崩溃,
陪同客户回回喝醉,
客户总嫌价格太贵,
临管执法还要索贿,
无暇顾家愧对长辈,
回到家里内疚惧内,
工资不高还要交税,
囊中羞涩,见人惭愧,
青春身体已经耗废,
人生年华如此狼狈,
哎,IT人真累!
谨以此献给IT的同行兄弟们
===================================程序员篇

嫁人不嫁程序员,
一年到头到处忙,
我是一个程序员,
背井离乡在外忙,
白天累得脑发涨,
晚上仍为资料忙;
思乡痛苦心里藏,
四海漂泊习为常,
长年累月在外奔,
不能回家陪爹娘,
终身大事无心管,
亲戚朋友摧喜糖,
心中有苦说不出,
回答只能笑来搪;
工资一点泪成行,
怎能买起商品房,
压力大得气难喘,
前途在哪路迷茫;
恋人分别各一方,
妹盼大哥早还乡,
相思之苦妹难咽,
距离拉得爱情黄;
好女不嫁程序员,
一年四季守空房,
家中琐事无暇想,
内心愧对爹和娘,
朦胧月色撒地上,
兄弟把酒聚一堂,
后悔走上这条路,
同舟共济把帆扬。
表面风光,内心彷徨;
容顔未老,心已苍桑;
成就难有,郁闷经常;
比骡子累,比蚂蚁忙;
===============================
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员。

Popularity: 12% [?]

分类: 杂谈 标签:

BEA系列产品下载地址大全

2009年4月23日 admin 没有评论

以下信息均收集于互联网,仅供学习和测试使用.

没有特别说明均是windows平台,支持windows xp、2000、2003

这些地址均为官方下载地址,仅用于学习研究,如有商务需要,请联系BEA公司.

最后更新日期: 2007-12-23,如您有需要,请留言,我尽量帮您把地址贴出来.

WebLogic Server9.2破解下载、 WebLogic Server 10破解下载

BEA所有产品下载地址:
http://commerce.bea.com/products/all_products.jsp

BEA ALBPM:
AquaLogic BPM Studio 6.0                  文件大小:798.36MB
http://download2.bea.com/pub/albpm/60/ALBPMStudio600_win.exe
AquaLogic BPM Studio 6.0 MP1         文件大小:476.91MB
http://download2.bea.com/pub/albpm/60/ALBPMStudio601_win_jvm32.exe
AquaLogic BPM Studio 5.7 MP3 文件大小:160.89MB
http://download2.bea.com/pub/albpm/57/ALBPMStudio573_win.exe
AquaLogic BPM Studio 5.7 MP2         文件大小:160.59MB
http://download2.bea.com/pub/albpm/57/ALBPMStudio572_win.exe
AquaLogic BPM Designer 5.7 MP2    文件大小:78.47MB
http://download2.bea.com/pub/albpm/57/ALBPMDesigner572_win.exe
AquaLogic BPM Enterprise Server 5.7 MP3 Standalone for Linux 文件大小:269.84MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseSA573_lin_jvm32.bin
AquaLogic BPM Enterprise Server 5.7 MP2 Standalone                       文件大小:241.95MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseSA572_win.exe
AquaLogic BPM Enterprise Server 5.7 MP2 Standalone for Linux 文件大小:268.84MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseSA572_lin.bin
AquaLogic BPM Enterprise Server 5.7 MP3 for WebLogic 文件大小:323.01MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseWL573_win.exe
AquaLogic BPM Enterprise Server 5.7 MP3 for WebLogic for Linux 文件大小:349.85MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseWL573_lin_jvm32.bin
AquaLogic BPM Enterprise Server 5.7 MP2 for WebLogic                     文件大小:321.62MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseWL572_win.exe
AquaLogic BPM Enterprise Server 5.7 MP2 for WebLogic for Linux 文件大小:348.48MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseWL572_lin.bin
AquaLogic BPM Enterprise Server 5.7 MP2 for WebLogic for AIX 文件大小:296.23MB
http://download2.bea.com/pub/albpm/57/ALBPMEnterpriseWL572_aix.bin
AquaLogic BPM Workspace Extensions 5.7 MP2                     文件大小:163.46MB
http://download2.bea.com/pub/albpm/57/extensions/ALBPMWorkspaceExtensions_57_MP2_win.zip

BEA ALI:
AquaLogic Interaction 6.1 MP1  (en)            文件大小:377.68MB
http://download2.bea.com/pub/alui/ali/61/AquaLogicInteraction_6-1_MP1_win.zip

BEA ALSB:
AquaLogic Service Bus 2.6  (en)                   文件大小:709.87MB
http://download2.bea.com/pub/alsb/26/alsb260_wls921_win32.exe
AquaLogic Service Bus 2.6 (Simplified Chinese)                     文件大小:850.19MB
http://download2.bea.com/pub/alsb/26/alsb260_wls921_ccjk_win32.exe

BEA WebLogic Platform:
BEA WebLogic Platform 8.1 SP5 (Simplified Chinese)           文件大小:557.87MB
http://download2.bea.com/pub/platform/81/platform815_zh_CN_win32.exe
BEA WebLogic Platform 8.1 SP6 (Simplified Chinese)           文件大小:531.76MB
http://download2.bea.com/pub/platform/81/platform816_zh_CN_win32.exe
BEA WebLogic Platform 8.1 SP6 (Simplified Chinese) for IBM AIX 文件大小:503.78MB
http://download2.bea.com/pub/platform/81/pj_platform816_zh_CN_generic.jar
BEA WebLogic Platform 9.2 MP2  (en)                                       文件大小:973.51MB
http://download2.bea.com/pub/platform/92/platform922_win32.exe
BEA WebLogic Platform 9.2 MP2 (Simplified Chinese)          文件大小:1.10GB
http://download2.bea.com/pub/platform/92/platform922_ccjk_win32.exe
BEA WebLogic Platform 9.2 MP2 (Simplified Chinese)  for Linux 文件大小:1.11GB
http://download2.bea.com/pub/platform/92/platform922_ccjk_linux32.bin

BEA WebLogic Server:
BEA WebLogic Server 8.1 SP6 (en) for IBM AIX 文件大小:250.62MB
http://download2.bea.com/pub/platform/81/pj_server816_generic.jar

BEA WebLogic Server 9.0 (Simplified Chinese)                       文件大小:331.97MB
http://download2.bea.com/pub/platform/90/server900_zh_CN_win32.exe
BEA WebLogic Server 9.2 (en)                                                     文件大小:601.91MB
http://download2.bea.com/pub/platform/92/server920_win32.exe
BEA WebLogic Server 9.2 MP2 (Simplified Chinese)              文件大小:779.74MB
http://download2.bea.com/pub/platform/92/server922_ccjk_win32.exe
BEA WebLogic Server 9.2 MP2(Simplified Chinese) for Linux 文件大小:788.82MB
http://download2.bea.com/pub/platform/92/server922_ccjk_linux32.bin
BEA WebLogic Server 9.2 MP2(Simplified Chinese) for IBM AIX 5.3 文件大小:304.83MB
http://download2.bea.com/pub/platform/92/server922_ccjk_generic.jar

BEA WebLogic Server 10 (Simplified Chinese)                        文件大小:797.11MB
http://download2.bea.com/pub/platform/100/server100_ccjk_win32.exe
补充 10.0 MP1
http://download2.bea.com/pub/platform/100/server1001_ccjk_upgrade_win32.exe

BEA ADS:
BEA AquaLogic Data Services Platform 2.5 (Simplified Chinese)  文件大小:97.86MB
http://download2.bea.com/pub/aldsp/25/aldsp_250_zh_CN_win32.exe

BEA WorhShop:
BEA Workshop Studio 10.1(30 days-trial)                                  文件大小:493.46MB
http://download2.bea.com/pub/workshop/101/workshopstudioflex101_win32.exe
BEA Workshop for JSP 10.1(free licsence)                                文件大小:340.31MB
http://download2.bea.com/pub/workshop/101/workshopjsp101_win32.exe

WebLogic Server 9.2:
http://download2.bea.com/pub/platform/92/server920_win32.exe
http://download2.bea.com/pub/platform/92/server920_linux32.bin
http://download2.bea.com/pub/platform/92/server920_hpux32.bin
http://download2.bea.com/pub/platform/92/server920_solaris32.bin
http://download2.bea.com/pub/platform/92/server920_zh_CN_win32.exe

WebLogic Portal 9.2:
http://download2.bea.com/pub/platform/92/portal920_win32.exe
http://download2.bea.com/pub/platform/92/portal920_linux32.bin
http://download2.bea.com/pub/platform/92/portal920_hpux32.bin
http://download2.bea.com/pub/platform/92/portal920_solaris32.bin

Weblogic Integration 9.2:
http://download2.bea.com/pub/platform/92/integration920_win32.exe
http://download2.bea.com/pub/platform/92/integration920_linux32.bin
http://download2.bea.com/pub/platform/92/integration920_hpux32.bin
http://download2.bea.com/pub/platform/92/integration920_solaris32.bin

Weblogic Express 9.2:
http://download2.bea.com/pub/platform/92/express920_win32.exe
http://download2.bea.com/pub/platform/92/express920_linux32.bin
http://download2.bea.com/pub/platform/92/express920_hpux32.bin
http://download2.bea.com/pub/platform/92/express920_solaris32.bin

Weblogic Workshop 9.2:
http://download2.bea.com/pub/platform/92/workshop920_win32.exe
http://download2.bea.com/pub/platform/92/workshop920_linux32.bin
http://download2.bea.com/pub/platform/92/workshop920_hpux32.bin
http://download2.bea.com/pub/platform/92/workshop920_solaris32.bin

Popularity: 48% [?]

什么是序列化

2009年4月17日 admin 没有评论

什么是序列化?
  .net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

序列化的目的:
  1、以某种存储形式使自定义对象持久化;
  2、将对象从一个地方传递到另一个地方。
  
  实质上序列化机制是将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。而要想实际的写出这个流,就要使用那些实现了IFormatter接口的类里的Serialize和Deserialize方法。
  在.net框架里提供了这样两个类:
  
  一、BinaryFormatter
  
  BinaryFormatter使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。
  
  首先我们创建一个类:
  [Serializable]
  public class MyObject {
   public int n1 = 0;
   public int n2 = 0;
   public String str = null;
  }
  Serializable属性用来明确表示该类可以被序列化。同样的,我们可以用NonSerializable属性用来明确表示类不能被序列化。
  接着我们创建一个该类的实例,然后序列化,并存到文件里持久:
  MyObject obj = new MyObject();
  obj.n1 = 1;
  obj.n2 = 24;
  obj.str = “一些字符串”;
  IFormatter formatter = new BinaryFormatter();
  Stream stream = new FileStream(”MyFile.bin”, FileMode.Create,
  FileAccess.Write, FileShare.None);
  formatter.Serialize(stream, obj);
  stream.Close();
  
  而将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。
  IFormatter formatter = new BinaryFormatter();
  Stream stream = new FileStream(”MyFile.bin”, FileMode.Open,
  FileAccess.Read, FileShare.Read);
  MyObject obj = (MyObject) formatter.Deserialize(fromStream);
  stream.Close();
  
  // 下面是证明
  Console.WriteLine(”n1: {0}”, obj.n1);
  Console.WriteLine(”n2: {0}”, obj.n2);
  Console.WriteLine(”str: {0}”, obj.str);
  
  二、SoapFormatter
  
  前面我们用BinaryFormatter以二进制格式来序列化。很容易的我们就能把前面的例子改为用SoapFormatter的,这样将以xml格式化,因此能有更好的可移植性。所要做的更改只是将以上代码中的格式化程序换成 SoapFormatter,而 Serialize 和 Deserialize 调用不变。对于上面使用的示例,该格式化程序将生成以下结果。
  
      xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   xmlns:xsd=”http://www.w3.org/2001/XMLSchema”
   xmlns:SOAP- ENC=http://schemas.xmlsoap.org/soap/encoding/
   xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/
   SOAP-ENV:encodingStyle=
   “http://schemas.microsoft.com/soap/encoding/clr/1.0
   http://schemas.xmlsoap.org/soap/encoding/”
   xmlns:a1=”http://schemas.microsoft.com/clr/assem/ToFile”>
 
  在这里需要注意的是,无法继承 Serializable 属性。如果从 MyObject 派生出一个新的类,则这个新的类也必须使用该属性进行标记,否则将无法序列化。例如,如果试图序列化以下类实例,将会显示一个 SerializationException,说明 MyStuff 类型未标记为可序列化。
  
  public class MyStuff : MyObject
  {
   public int n3;
  }
  
  然而关于格式化器,还有个问题,假设我们只需要xml,但不需要soap特有的额外信息,那么该怎么做?有两个方案:1、编写一个实现IFormatter接口的类,采用的方式类似于SoapFormatter,但是可以没有你不需要的信息;2、使用框架提供的类XmlSerializer。
  XmlSerializer类和前两个主流的序列化类的几个不同点是:
  1、不需要Serializable属性,Serializable和NonSerializable属性将会被忽略,但是使用XmlIgnore属性,和NonSerializable属性类似。
  2、该类不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共特性。
  3、要求被序列化的类要有一个默认的构造器。
  
  我们改一下前面的MyObject类为:
  
  public class MyObject {
   public int n1;
   public String str;
   public MyObject(){}
   public MyObject(n1,str)
   {
   this.n1=n1;
   this.str=str;
   }
   public override string ToString()
   {
   return String.Format(”{0}:{1}”,this.str,this.n1);
   }
  }
  
  现在我们用XmlSerializer类来对修改后的MyObject进行序列化。因为XmlSerializer类的构造器里有个Type参数,所以XmlSerializer对象被明确的 连到该Type参数所表示的类了。XmlSerializer类也有Serialize和Deserialize方法:
  MyObject obj = new MyObject(12,”some string…”);
  XmlSerializer formatter = new XmlSerializer(typeof(MyObject));
  Stream stream = new FileStream(”MyFile.xml”, FileMode.Create,
  FileAccess.Write, FileShare.None);
  formatter.Serialize(stream, obj);
  //下面是反序列化
  stream.Seek(0,SeekOrigin.Begin)
  MyObject obj_out=(MyObject)formatter.Deserialize(stream)
  stream.Close();
  Console.WriteLine(obj_out);
  
  这个简单的列子可以加以扩展,以便利用更多的XmlSerializer功能,包括使用属性控制xml标记、使用xml模式和进行soap编码。
  
  自定义序列化
  
  如果你希望让用户对类实现序列化,但是对数据流的组织方式不完全满意,那么可以通过在对象上实现 ISerializable 接口来自定义序列化过程。这一功能在反序列化后成员变量的值失效时尤其有用,但是需要为变量提供值以重建对象的完整状态。除了必须将类申明为 Serializable 的同时,还要要实现 ISerializable接口,需要实现 GetObjectData 方法以及一个特殊的构造函数,在反序列化对象时要用到此构造函数。在实现 GetObjectData 方法时,最常调用的SerializationInfo的方法是AddValue,这个方法具有针对所有标准类型(int、char等等)的重载版本;而 StreamingContext 参数描述给定的序列化流的源和目标,这样我们就可以知道我们是将对象序列化到持久性存储还是在将他们跨进程或机器序列化。而在反序列化时,我们调用SerializationInfo提供的一组Getxxx方法,他们针对所有标准类型数据执行各种AddValue重载版本的逆操作。下代码示例说明了如何在前一部分中提到的 MyObject 类上实现 ISerializable。
  
  [Serializable]
  public class MyObject : ISerializable
 {
   public int n1;
   public int n2;
   public String str;
  
   public MyObject()
   {
   }
  
   protected MyObject(SerializationInfo info, StreamingContext context)
   {
   n1 = info.GetInt32(”i”);
   n2 = info.GetInt32(”j”);
   str = info.GetString(”k”);
   }
  
   public virtual void GetObjectData(SerializationInfo info,
  StreamingContext context)
   {
   info.AddValue(”i”, n1);
   info.AddValue(”j”, n2);
   info.AddValue(”k”, str);
   }
    }
  在序列化过程中调用 GetObjectData 时,需要填充方法调用中提供的 SerializationInfo 对象。只需按名称/值对的形式添加将要序列化的变量。其名称可以是任何文本。只要已序列化的数据足以在反序列化过程中还原对象,便可以自由选择添加至 SerializationInfo 的成员变量。如果基对象实现了 ISerializable,则派生类应调用其基对象的 GetObjectData 方法。
    
  需要强调的是,将 ISerializable 添加至某个类时,需要同时实现 GetObjectData 以及特殊的具有特定原型的构造函数--重要的是,该构造函数的参数列表必须与GetObjectData相同,这个构造函数将会在反序列化的过程中使用:格式化器从流中反序列化数据,然后通过这个构造函数对对象进行实列化。如果缺少 GetObjectData,编译器将发出警告。但是,由于无法强制实现构造函数,所以,缺少构造函数时不会发出警告。如果在没有构造函数的情况下尝试反序列化某个类,将会出现异常。在消除潜在安全性和版本控制问题等方面,当前设计优于 SetObjectData 方法。例如,如果将 SetObjectData 方法定义为某个接口的一部分,则此方法必须是公共方法,这使得用户不得不编写代码来防止多次调用 SetObjectData 方法。可以想象,如果某个对象正在执行某些操作,而某个恶意应用程序却调用此对象的 SetObjectData 方法,将会引起一些潜在的麻烦。
  
  在反序列化过程中,使用出于此目的而提供的构造函数将 SerializationInfo 传递给类。对象反序列化时,对构造函数的任何可见性约束都将被忽略,因此,可以将类标记为 public、protected、internal 或 private。一个不错的办法是,在类未封装的情况下,将构造函数标记为 protect。如果类已封装,则应标记为 private。要还原对象的状态,只需使用序列化时采用的名称,从 SerializationInfo 中检索变量的值。如果基类实现了 ISerializable,则应调用基类的构造函数,以使基础对象可以还原其变量。
  
  如果从实现了 ISerializable 的类派生出一个新的类,则只要新的类中含有任何需要序列化的变量,就必须同时实现构造函数以及 GetObjectData 方法。以下代码片段显示了如何使用上文所示的 MyObject 类来完成此操作。
  
  [Serializable]
  public class ObjectTwo : MyObject
  {
   public int num;
  
   public ObjectTwo() : base(){ }
  
   protected ObjectTwo(SerializationInfo si, StreamingContext context) : base(si,context)
   {
   num = si.GetInt32(”num”);
   }
  
   public override void GetObjectData(SerializationInfo si, StreamingContext context)
   {
   base.GetObjectData(si,context);
   si.AddValue(”num”, num);
   }
  }
  切记要在反序列化构造函数中调用基类,否则,将永远不会调用基类上的构造函数,并且在反序列化后也无法构建完整的对象。
  
  对象被彻底重新构建,但是在反系列化过程中调用方法可能会带来不良的副作用,因为被调用的方法可能引用了在调用时尚未反序列化的对象引用。如果正在进行反序列化的类实现了 IDeserializationCallback,则反序列化整个对象图表后,将自动调用 OnSerialization 方法。此时,引用的所有子对象均已完全还原。有些类不使用上述事件侦听器,很难对它们进行反序列化,散列表便是一个典型的例子。在反序列化过程中检索关键字/值对非常容易,但是,由于无法保证从散列表派生出的类已反序列化,所以把这些对象添加回散列表时会出现一些问题。因此,建议目前不要在散列表上调用方法。 

Popularity: 15% [?]

分类: .NET 标签:

Microsoft Visual Studio 遇到了问题,需要关闭

2009年4月16日 admin 没有评论

很多人遇到这个问题, 可是在GOOGLE中找到的答案都不适合自己,

以下是我的解决方法希望对大家有所帮助:

1 ,  打VS2008的 SP1 补丁

2, 升级 VS2008 (用正版注册码升级,我的另外一篇文章有正版注册码及相关介绍 点击查看)

3, 重启 电脑

Popularity: 18% [?]