对象序列化

转载 2005年03月01日 16:53:00

using System;
using System.IO;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Text;
using System.Collections;

public class SimpleGraph {


    public static void Main(String[] args) {

        Console.WriteLine ("创建对象图");
        TreeNode node = new TreeNode ("");
        FillTree (node);
        node.PrintTree (Console.Out);

        Console.Write ("正在将对象图序列化到磁盘..");
        Stream s = (Stream)File.Open("foo.xml", FileMode.Create, FileAccess.Write);
        SoapFormatter b = new SoapFormatter ();
        b.Serialize(s, node);
        s.Close();
        Console.WriteLine ("完成。");

        Console.Write ("正在从磁盘反序列化对象图..");
        Stream r = (Stream)File.Open("foo.xml", FileMode.Open, FileAccess.Read);
        SoapFormatter c = new SoapFormatter ();

        TreeNode n = (TreeNode) c.Deserialize(r);
        Console.WriteLine ("完成。");
        r.Close();
        n.PrintTree (Console.Out);

        Console.WriteLine ("/r/n按 Return 键退出。");
        Console.Read();
    }

    public static void FillTree (TreeNode node) {
        Type [] types = typeof (object).Module.Assembly.GetTypes();
        node.AddChild (new TreeNode (typeof(object).FullName));


        foreach (Type t in types) {
            if (t.BaseType == null) continue;
            if (!t.IsPublic) continue;
            TreeNode n = node.Find (t.BaseType.FullName);
            if (n != null) n.AddChild (new TreeNode (t));
        }
    }
}

[Serializable] public class TreeNode : ISerializable {
    private Object value;

    private ArrayList children;


    private TreeNode (SerializationInfo info, StreamingContext c) {
        value = info.GetValue ("value", typeof(object));
        children = new ArrayList ();
        Object o;

        for (int i = 1; i < info.MemberCount; i++) {
            o = info.GetValue (i.ToString(), typeof(object));
            children.Add (o);
        }
    }

    public TreeNode (Object val) {
        if (val == null) throw new Exception ("val 一定不能为空");
        value = val;
        children = new ArrayList ();
    }

    void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context) {
        if (value == null) info.AddValue ("value", "NULL");
        else info.AddValue ("value", value.ToString() + "(SAVED)");
        int i = 1;
        foreach (object o in children) {
            if (o == null) continue;
            info.AddValue (i.ToString(), o);
            i++;
        }
    }

    public Object Value {
        get {
            return value;
        }
    }


    public void AddChild (TreeNode child) {
        if (!children.Contains (child))
            children.Add (child);
    }

    public TreeNode Find (Object val) {
        if (val == null) throw new Exception ("val 一定不能为空");
        if (value.Equals (val)) return this;
        foreach (TreeNode t in children) {
            TreeNode w = t.Find (val);
            if (w != null) return w;
        }
        return null;
    }

    override public bool Equals (Object obj) {
        if (! (obj is TreeNode)) return false;
        TreeNode t = (TreeNode) obj;
        return (t.value.Equals (this.value));
    }

    override public string ToString () {
        return value.ToString ();
    }

    public void PrintTree (TextWriter  output) {
        PrintTree (output, 0);
    }

    private void PrintTree (TextWriter  output, int offset) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (int i =0; i < offset-1; i++) {
            sb1.Append (" ");
            sb1.Append ("|");
            sb2.Append (" ");
            sb2.Append ("|");
        }
        if (offset >=1) {
            sb1.Append (" ");
            sb1.Append ("+-");
            sb2.Append (" ");
            sb2.Append ("|");
        }
        output.WriteLine ("{0}", sb2);
        output.WriteLine ("{0}{1}", sb1, value);
        foreach (TreeNode t in children) {
            t.PrintTree (output, offset+1);
        }
    }
}

Java 对象序列化机制详解

对象序列化的目标:将对象保存到磁盘中,或允许在网络中直接传输对象。 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,通过网络将这种二进制流...
  • zuiwuyuan
  • zuiwuyuan
  • 2014年10月09日 22:24
  • 1112

PHP基础教程十三之反射、对象序列化

本节讲解的内容 对象的克隆 对象的遍历 对象的序列化和反序列化 内置标准类的使用 traits的使用 类和对象的相关函数 PHP反射机制...
  • li741350149
  • li741350149
  • 2016年10月11日 14:52
  • 967

Java对象序列化成JSON对象

1、项目地址http://flexjson.sourceforge.net/ 2、使用项目首页有比较详细的说明 3、例子Person.javapackage org.bruceye.demo.flex...
  • yyhygp
  • yyhygp
  • 2009年01月10日 13:03
  • 4685

C#对象序列化详解

C#中的序列化主要是通过一个格式化工具获取某个自定义类型对象中的所有数据成员并写入传入的一个文件流中,或者从文件流对象中               解析出某个自定义类型对象中的所有数据成员并赋值到...
  • u011390632
  • u011390632
  • 2013年12月08日 17:30
  • 1844

java常用对象序列化对象性能简单比较

java常用的序列化手段有很多,包括 jdk Serialize、json、kryo、protobuf、xml等。在这里,我...
  • linsongze2011
  • linsongze2011
  • 2014年10月27日 17:18
  • 1389

什么是对象序列化?如何实现?什么情况下使用?

a)什么是对象序列化: 对象序列化可以将一个对象保存到一个文件,可以将通过流的方式在网络上传输,可以将文件的内容读取转化为一个对象。所谓对象流也就是将对象的内容流化,可以对流化后的对象进行读写操作,也...
  • JimboWonG
  • JimboWonG
  • 2017年02月07日 14:41
  • 702

对象序列化到文本并读取

import java.io.FileReader; import java.io.FileWriter; import java.io.ObjectInputStream; import...
  • xinyu0100
  • xinyu0100
  • 2010年07月28日 16:18
  • 473

C#对象反序列化与对象序列化

C#对象反序列化与对象序列化 对象序列化的介绍 1、.net支持对象序列化的几种方式 二进制序列化  SOAP序列化  XML序列化 2、几种序列化的区别 二进制格式和SOAP格式可序列化一...
  • GaraMaps
  • GaraMaps
  • 2016年09月13日 20:02
  • 824

将对象序列化为XML字符串

如果你想直接将对象序列化成字符串而不要借助FileStream,对象或者任何留对象,那么StringReader,和StringWriter类将会派上用场,假设你需要序列化一个整数列表。序列化和反序列...
  • ITX2000
  • ITX2000
  • 2014年04月01日 14:24
  • 909

netty 对象序列化传输示例

package object.server.impl; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel...
  • joeyon
  • joeyon
  • 2016年12月01日 18:05
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象序列化
举报原因:
原因补充:

(最多只允许输入30个字)