序列化和反序列化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using UniversalModulePlugin.CommandManager;

namespace UniversalModulePlugin.Template
{
   public static  class LocationCommand
    {
    
       //队列的存放路径
        public static string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\UniversalModule\\QueueLink\\queue.bin";

       //保存队列
        public static void Save(QueueCommand QueueCommand)
        {
 //1:对应读取数据1
            var data = ZipObject.CompressionObject(QueueCommand);//将对象信息压缩
            FileStream fs = new FileStream(path, FileMode.Create);//创建文件流
            fs.Write(data, 0, data.Length);//写入文件中
            fs.Close();//关闭文件流

            ////判断第一次保存时,虚拟数据是否为空
            //if (QueueCommand != null)
            //{
            //    FileStream fs = new FileStream(TManager.path + "\\queueBind.bin", FileMode.Create);
            //    BinaryFormatter bf = new BinaryFormatter();
            //    bf.Serialize(fs, QueueCommand);
            //    fs.Close();
            //}
        }

 //读取数据
        public static QueueCommand GetReader()
        {
 //1
            QueueCommand QueueCommand = new QueueCommand();
            if (!Directory.Exists(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\UniversalModule\\QueueLink"))
            {
                Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\UniversalModule\\QueueLink");
            }
            if (!File.Exists(path))
            {
                File.Create(path);
            }
            else
            {

                FileStream fs = new FileStream(path, FileMode.Open);
                byte[] data = new byte[(int)fs.Length];
                fs.Read(data, 0, (int)fs.Length);
                var obj = ZipObject.DecompressionObject(data);
                fs.Close();
                if (obj != null)
                {
                    QueueCommand = obj as QueueCommand;
                }
            }
            return QueueCommand;


            //QueueCommand QueueCommand = new QueueCommand();
            //if (File.Exists(TManager.path + "\\queueBind.bin"))
            //{
            //    FileStream fs = new FileStream(TManager.path + "\\queueBind.bin", FileMode.Open);
            //    BinaryFormatter bf = new BinaryFormatter();
            //    QueueCommand = (QueueCommand)bf.Deserialize(fs);
            //    fs.Close();
            //}
            //return QueueCommand;
        }

    public class ZipObject
    {
        public static byte[] CompressionObject(object DataOriginal)
        {
            if (DataOriginal == null) return null;
            BinaryFormatter bFormatter = new BinaryFormatter();
            MemoryStream mStream = new MemoryStream();
            bFormatter.Serialize(mStream, DataOriginal); byte[] bytes = mStream.ToArray();
            MemoryStream oStream = new MemoryStream();
            DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress); zipStream.Write(bytes, 0, bytes.Length); zipStream.Flush(); zipStream.Close(); return oStream.ToArray();
        }

        public static object DecompressionObject(byte[] bytes)
        {
            if (bytes == null) return null;
            MemoryStream mStream = new MemoryStream(bytes);
            mStream.Seek(0, SeekOrigin.Begin); DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
            object dsResult = null;
            BinaryFormatter bFormatter = new BinaryFormatter();
            dsResult = (object)bFormatter.Deserialize(unZipStream);
            return dsResult;
        }

    }

    }
}

posted @ 2010-12-15 09:17  紫荆飞翔  阅读(111)  评论(0)    收藏  举报