zoukankan      html  css  js  c++  java
  • 在内存流中对象的二进制序列化

    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO;
    using System;
    public sealed class Serializer
    {
        private Serializer() { }
    
        public static string SerializeObject(object obj)
        {
            IFormatter formatter = new BinaryFormatter();
            string result = string.Empty;
            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, obj);
    
                byte[] byt = new byte[stream.Length];
                byt = stream.ToArray();
                //result = Encoding.UTF8.GetString(byt, 0, byt.Length);
    
                result = Convert.ToBase64String(byt);
                stream.Flush();
            }
            return result;
        }
    
        public static object DeserializeObject(string str)
        {
            IFormatter formatter = new BinaryFormatter();
            //byte[] byt = Encoding.UTF8.GetBytes(str);
    
            byte[] byt = Convert.FromBase64String(str);
            object obj = null;
            using (Stream stream = new MemoryStream(byt, 0, byt.Length))
            {
                obj = formatter.Deserialize(stream);
            }
            return obj;
        }
    }

    再次单元测试通过了,说明修改有效,回头debug到“result = Convert.ToBase64String(byt); ”,result的值开头没有"\0"了,都是字母,这才证明了序列化成功的原因。之后对基于64位的字符串转换应该多加关注,往往能起到令人惊喜的效果,本案总算是结案了。
  • 相关阅读:
    IOS8定位
    ios通讯录基本操作2014-12月版
    ios悬浮按钮的实现
    MartinLiPageScrollView广告栏实现
    ios分享(友盟分享)
    vue2.0路由-适合刚接触新手简单理解
    git链接GitHub命令及基本操作
    Node
    JS数组sort()排序
    原生JS获取CSS样式并修改
  • 原文地址:https://www.cnblogs.com/luluping/p/1740123.html
Copyright © 2011-2022 走看看