C#二进制序列化实例分析

本文实例讲述了C#二进制序列化的方法。分享给大家供大家参考。具体如下:

using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
namespace WebApplication1.Serialize
{
  public partial class Binary1 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    //二进制序列化不同于 XMLSerializer 类,后者只序列化公共字段。
    protected void Button1_Click(object sender, EventArgs e)
    {
      MyObject obj = new MyObject();
      obj.n1 = 1;
      obj.n2 = 24;
      obj.str = "Some String";
      IFormatter formatter = new BinaryFormatter();
      Stream stream = new FileStream("C:/MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
      formatter.Serialize(stream, obj);
      stream.Close();
    }
    [Serializable]
    public class MyObject
    {
      public int n1 = 0;
      public int n2 = 0;
      public String str = null;
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
      IFormatter formatter = new BinaryFormatter();
      Stream stream = new FileStream("C:/MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
      MyObject obj = (MyObject)formatter.Deserialize(stream);
      stream.Close();
      // Here's the proof.
      Response.Write("n1: {0}"+ obj.n1+"<br/>");
      Response.Write("n2: {0}" + obj.n2 + "<br/>");
      Response.Write("str: {0}" + obj.str + "<br/>");
    }
    //上面所用的 BinaryFormatter 非常有效,生成了非常简洁的字节流。
    //通过该格式化程序序列化的所有对象也可以通过该格式化程序进行反序列化,这使该工具对于序列化将在 .NET Framework 上被反序列化的对象而言十分理想。
    //需要特别注意的是,在反序列化一个对象时不调用构造函数。出于性能方面的原因对反序列化施加了该约束。
    //但是,这违反了运行库与对象编写器之间的一些通常约定,开发人员应确保他们在将对象标记为可序列化时了解其后果。
    //如果可移植性是必需的,则转为使用 SoapFormatter。
    //只需用 SoapFormatter 代替上面代码中的 BinaryFormatter,
    //并且如前面一样调用 Serialize 和 Deserialize。此格式化程序为上面使用的示例生成以下输出。
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • protobuf对象二进制序列化存储(详解)

    首先下载protobuf库,可以用Nuget. demo: using System; namespace Tools { public class BufHelp { /// <summary> /// 对象锁 /// </summary> private readonly static Object Locker = new Object(); ///// <summary> ///// 读写分离锁 ///// </summary> ///// <

  • Java,C#使用二进制序列化、反序列化操作数据

    java使用二进制序列化.反序列化的操作首先,要引入java.io下面相关包,或者直接写import java.io.*; 下面,为了书写操作的方便,采用复制文件,和throws声明异常的方式来写 复制代码 代码如下: public void test6() throws IOException { byte[] b = new byte[1024];//定义字节数组,缓冲 FileInputStream in = new FileInputStream("E:\\logo.gif")

  • C# 三种序列化方法分享

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象为了序列化一个对象,我们需要一个被序列化的对象,一个容纳被序列化了的对象的(字节)流和一个格式化器.进行序列化之前我们先看看System.Runtime.Serialization名字空间.ISerializable接口允许我们使任何类成为可序列化的类. 如果我们给自己写的类标识[Serializable]特性,我们就能

  • c#对象反序列化与对象序列化示例详解

    1.对象序列化的介绍 (1).NET支持对象序列化的几种方式二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下.SOAP序列化:对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP 协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的.XML

  • C#二进制序列化实例分析

    本文实例讲述了C#二进制序列化的方法.分享给大家供大家参考.具体如下: using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; namespace WebApplication1.Serialize { public partial class Binary1 : System.Web.UI.Page { protected void Page_Load(object se

  • C++二进制翻转实例分析

    本文实例讲述了C++二进制翻转的方法,将常用的几种解决方法罗列出来供大家比较选择.具体如下: 首先来看看一个相对笨拙的算法: #include <iostream> using namespace std; void printBinary(unsigned char str, int size = 1) { int flag = 0x01; for (int i = 0; i < size; i++) { for (int i = 0; i < 8; i++) { if (str

  • java序列化与反序列化操作实例分析

    本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. 示例代码: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.i

  • C#中Serializable序列化实例详解

    本文实例讲述了C#中Serializable序列化.分享给大家供大家参考.具体分析如下: 概述: 序列化就是是将对象转换为容易传输的格式的过程,一般情况下转化打流文件,放入内存或者IO文件 中.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象,或者和其它应用程序共享使用.反之,反序列化根据流重新构造对象. 一.几种序列化技术  1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用.例如,通过将对象序列化到剪贴板,可

  • Symfony2开发之控制器用法实例分析

    本文实例分析了Symfony2开发之控制器用法.分享给大家供大家参考,具体如下: 控制器是PHP函数,通过它,你可以根据HTTP请求创建任务信息,并且构建和返回HTTP响应.响应可以是HTML页面.XML文档.序列化的JSON数组.图片.重定向.404错误甚至是你可以想到的一切.控制器中包含了你应用程序需要创建响应的抽象逻辑. 接收请求,返回响应的基本生命周期 1.每个请求都被单个前端控制器(如app.php或index.php)文件处理,前端控制器负责引导框架: 2.路由查看并匹配请求信息,并

  • JQuery中Ajax()的data参数类型实例分析

    本文实例分析了JQuery中Ajax()的data参数类型.分享给大家供大家参考,具体如下: 前面简单分析介绍了<ajax中data传参的两种方式>,对于ajax参数传递方式有了初步的了解,这里就来进一步分析一下ajax中data参数的类型. 假如现在有这样一个表单,是添加元素用的. <form id='addForm' action='UserAdd.action' type='post'> <label for='uname'>用户名</label>:&

  • Jackson的用法实例分析

    通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能非常好.本文就来针对Jackson的用法做一个较为详细的实例分析.具体如下: 一.简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是哪种形式的转换,Jackson > Gson > Json-lib,而且Jackson的处理能力甚至高出Json-lib近10倍左右,且正确性也十分高.相比之下,Json-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃.

  • Java集合ArrayDeque类实例分析

    Java集合ArrayDeque类实例分析 前言 ArrayDeque类是双端队列的实现类,类的继承结构如下面,继承自AbastractCollection(该类实习了部分集合通用的方法,其实现了Collection接口),其实现的接口Deque接口中定义了双端队列的主要的方法,比如从头删除,从尾部删除,获取头数据,获取尾部数据等等. public class ArrayDeque<E> extends AbstractCollection<E> implements Deque&

  • php提交post数组参数实例分析

    本文实例分析了php提交post数组参数的用法.分享给大家供大家参考,具体如下: 首先php中要想从页面传送数组到服务端a,要在页面上多个空间同名,而且对于名称有要求,那就是 name="aa[ ]",注意这里要多加一个数组的符号,这样才能在服务端a取到 复制代码 代码如下: $_POST[aa] 得到的为数组. 更深一层的问题是,假设我现在需要对post中的参数进行处理后,再传送给另外一个服务端,对于参数aa,应该怎么传递呢? 如果不做什么处理,拼装完post请求后,服务端b获取到的

  • PHP共享内存使用与信号控制实例分析

    本文实例讲述了PHP共享内存使用与信号控制.分享给大家供大家参考,具体如下: 共享内存 共享内存的使用主要是为了能够在同一台机器不同的进程中共享一些数据,比如在多个 php-fpm 进程中共享当前进程的使用情况.这种通信也称为进程间通信(Inter-Process Communication),简称 IPC. PHP 内置的 shmop 扩展 (Shared Memory Operations) 提供了一系列共享内存操作的函数(可能是用的人不多吧,这一块儿的文档还没有中文翻译).在 Linux

随机推荐