zoukankan      html  css  js  c++  java
  • 将AE对象序列化为二进制文件 (序列化与反序列化)

    http://maruigxxg.blog.163.com/blog/static/3051816420098291149394/ 当我们编写AE程序时,通常会遇到需要存储某个AE对象的情况, 比如Layer,Element,Map,Legend,NorthArrow等等这些 举个例子说明一下:在我们编辑Featurelayer时,我们可以容易的将Feature存储在Featureclass中, 同样,如果我们向Graphicscontainer中添加了Element,我们也希望可以容易的存储Element 这样每次加载时可以将Element顺利显示出来,但是不巧的是,AE中并没有提供存储Element的方法 这个时候,我们就需要将Graphicscontainer序列化成文件,这样就可以达到存储的目的了 要知道,Featureclass存储成shapefile也好,Geodatabase也罢,都是一种文件的组织形式,也都是一种特殊意义上的序列化。 好,下面,介绍序列化的方法: 首先可以序列化的对象必须实现了IPersistStream接口, 其中IPersistStream接口是Windos中的接口,派生自 IPersist,并增加了4个函数,从流(IStream)中读写组件属性信息。 下面是各个函数的意义: IsDirty() 组件内部属性是否发生了变化。为调用者是否需要保存信息提供依据 Load() 从 IStream 中读入信息,初始化组件属性 Save() 把属性信息保存到 IStream 中 GetSizeMax() 返回信息尺寸,以便调用者事先开辟空间 ''' <summary> ''' 将AE中实现了IPersistStream接口的对象序列化为二进制文件 ''' </summary> ''' <param name="pObject">对象</param> ''' <param name="pFilePath">文件名全路径(形如:“C:\file.blb”)</param> ''' <remarks></remarks>   Sub WriteObject(ByVal pFilePath As String, ByVal pObject As Object) If Not TypeOf pObject Is IPersistStream Then MessageBox.Show("该对象不支持序列化!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If Dim pMemoryBlobStream As IMemoryBlobStream = New MemoryBlobStream Dim pObjectStream As IObjectStream = New ObjectStream pObjectStream.Stream = pMemoryBlobStream Dim pPersistStream As IPersistStream = pObject pPersistStream.Save(pObjectStream, True) Try pMemoryBlobStream.SaveToFile(pFilePath) Catch ex As Exception MessageBox.Show("序列化文件路径不合法!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try End Sub   ''' <summary> ''' 从序列化文件中读取对象(反序列化) ''' </summary> ''' <param name="pObject">对象</param> ''' <param name="pFilePath">文件名全路径(形如:“C:\file.blb”)</param> ''' <remarks></remarks>   Sub ReadObject(ByVal pFilePath As String, ByRef pObject As Object) If Not TypeOf pObject Is IPersistStream Then MessageBox.Show("该对象不支持序列化!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If If Not System.IO.File.Exists(pFilePath) Then MessageBox.Show("序列化文件不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If Dim pMemoryBlobStream As IMemoryBlobStream = New MemoryBlobStream pMemoryBlobStream.LoadFromFile(pFilePath) Dim pObjectStream As IObjectStream = New ObjectStream pObjectStream.Stream = pMemoryBlobStream Dim pPersistStream As IPersistStream = pObject pPersistStream.Load(pObjectStream) End Sub
  • 相关阅读:
    倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何把FBD功能块转换成ST语言
    揭秘一个操作灰色关键词牟取暴利的案例
    [原创汉化] 价值990美元的顶级专业数据恢复软件O&O DiskRecovery 11(技术员版)汉化绿色版
    list集合如何对里面的元素进行排序
    jquery datables ajax分页后的点击事件无效是怎么回事
    阿里云自动快照有什么用,如何设置?
    php后台管理员权限相关表结构
    服务器上装了安全狗后远程链接不上怎么解决
    Ehcache配置参数简介
    Spring+EhCache缓存实例
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327957.html
Copyright © 2011-2022 走看看