zoukankan      html  css  js  c++  java
  • Blob未完成(待优化)

    /**************************************************/
    /*    Author   : Anby                            */
    /*    Using    :兼容powerBuilder中的Blob数据类型 */
    /*    DateTime :2013-08-04                       */
    /*    版本     :未知,功能尚未完全实现           */
    /**************************************************/
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace BolbTools 
    {
        public enum DateType { Date, Time, DateTime }
        public enum DataType { Boolean, Char, Date, DateTime, Decimal, Double, Int, String, Blob }
        public class Blob
        {
            #region 字段
            private List<byte> _arrList = new List<byte>();   //定义可变长的数组
    
            private double _maxLength = Math.Pow(2,32)-1;
            #endregion
    
            #region 属性
            public List<byte> ArrList
            {
                get { return _arrList; }
                set { _arrList = value; }
            }
    
            #endregion
    
            #region 方法
    
            /*获取str的char数组长度*/
            public static long Length(string str)
            {
               return str.ToCharArray().Length;    
            }
           
            /*获取blob对象的list长度   */
            public static long Length(Blob blob)
            {
                return blob._arrList.Count;
            }
    
            public void Add(byte b)
            {
                _arrList.Add(b);
            }
            
    
    
            public void InsertByte(int index,byte b)
            {
                _arrList.Insert(index,b);
            }
    
            public ulong InsertBlob(int index, Blob blob)
            {
                try
                {
                    _arrList.InsertRange(index, blob._arrList);
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    for (int i = 0; i < index; i++)
                        _arrList.Add(0);
                    _arrList.InsertRange(index, blob._arrList);
                }
                return (ulong)(blob._arrList.Count + index);
            }
    
    
            /*从blob对象中截取从n开始,到blob.length结尾的数据*/
            public Blob GetBlob(Blob blob, int n)
            {
              return  GetBlob(blob,n,blob._arrList.Count);
            }
            /*从blob对象中截取从n开始,到length长度的数据*/
            public Blob GetBlob(Blob blob, int n,int length)
            {
                //@TODO 获取n-length的blob对象
    
                //定义空的Blob对象
                Blob resultBlob = new Blob();
    
                //如果索引值超出blob的范围,那么返回一个空的Blob对象
                if (n > blob._arrList.Count)
                {
                    return resultBlob;
                }
                //如果n+length>blob的长度,返回从n开始到blob.length的blob对象
                if ((n + length) > blob._arrList.Count)
                {
                    for (int i = n; i < blob._arrList.Count; i++)
                        resultBlob._arrList.Add(blob._arrList[i]);
                }
                else //否则返回从n开始length长度的blob对象
                {
                    for (int i = n; i < n+length; i++)
                        resultBlob._arrList.Add(blob._arrList[i]);
                }
                return resultBlob;
    
               
    
                return null;
            }
    
    
    
    
            public void RemoveAt(int index)
            {
                _arrList.RemoveAt(index);
            }
    
    
    
            /*将字符串转换为Bolb*/
            //Blob方法:将字符串转换为Blob对象--此方法中list不含有
            public static Blob  StrToBlob(string text)
            {
                Blob sub = new Blob();
                byte[] bytes = UnicodeEncoding.Default.GetBytes(text);
                foreach (byte b in bytes)
                {
                    sub.Add(b);
                } 
                return sub;
            }
    
            public static string BlobToStr(Blob blob)
            {
                //如果blob中的数据list长度为空 返回null
                if (blob._arrList.Count == 0) return null;
                 return  System.Text.UnicodeEncoding.Default.GetString(blob._arrList.ToArray());
            }
    
    
    
    
            public static ulong InsertBlob(ref Blob blob,int n,object data,DataType datatype)
            {
                Blob sub=new Blob();
                switch (datatype)
                {
                    case DataType.Boolean:
                        sub= ConvertToBlob(bool.Parse(data.ToString()));
                        break;
                    case DataType.Char:
                        sub=ConvertToBlob(char.Parse(data.ToString()));
                        break;
                    case DataType.Decimal:
                        sub = ConvertToBlob(decimal.Parse(data.ToString()));
                        break;
                    case DataType.Double:
                        sub=ConvertToBlob(double.Parse(data.ToString()));
                        break;
                    case DataType.Int:
                        sub = ConvertToBlob(int.Parse(data.ToString()));
                        break;
                    case DataType.String:
                        sub = ConvertToBlob(data.ToString());
                        break;
                    case DataType.Blob:
                        sub = (Blob)data;
                        break;
                }
                return blob.InsertBlob(n, sub);
            }
    
    
            #region  ConvertToBlob重载
            /*将字符串转换为Blob*/
            public static Blob ConvertToBlob(string text)
            {
                Blob sub = new Blob();
                sub = StrToBlob(text);
                sub.Add(0);//由于字符串中含有终止位
                return sub;
            }
    
            /*将一个字节转为为Blob*/
            public static Blob ConvertToBlob(char charValue)
            {
                return StrToBlob(charValue.ToString());
            }
    
            /*将Bool型数据转换为Blob*/
            public static Blob ConvertToBlob(bool boolValue)
            {
                return StrToBlob(boolValue.ToString());
            }
    
            /*将日期型数据转换为Blob*/
            public static Blob ConvertToBlob(DateTime date, DateType type)
            {
                Blob sub = new Blob();
                switch (type)
                {
                    case DateType.Date:
                        sub = StrToBlob(date.ToString("yyyy-MM-dd"));
                        break;
                    case DateType.Time:
                        sub = StrToBlob(date.ToString("hh-mm-ss"));
                        break;
                    default:
                        sub = StrToBlob(date.ToString("yyyy-MM-dd hh-mm-ss"));
                        break;
                }
                return sub;
            }
    
            /*将Double类型转换为Bolb*/
            public static Blob ConvertToBlob(double doubleValue)
            {
                return StrToBlob(doubleValue.ToString());
            }
    
            /*将Int类型转为Bolb*/
            public static Blob ConvertToBlob(int intValue)
            {
                return StrToBlob(intValue.ToString());
            }
    
            /*将decValue类型转为Bolb*/
            public static Blob ConvertToBlob(decimal decValue)
            {
                return StrToBlob(decValue.ToString());
            }
            #endregion
    
    
            #endregion
    
            #region 索引器
            /*定义索引器*/
            public byte this[int index]
            {
                get
                {   //检查索引范围
                    if (index < 0 || index >= _maxLength)
                    {
                        return 0;
                    }
                    else
                    {
                        return _arrList[index];
                    }
                }
                set
                {
                    if (!(index <= 0))
                    {
                        _arrList[index] = value;
                    }
                }
    
            }
            #endregion
    
        
        }  
    
    }
    View Code
  • 相关阅读:
    Integer判等的陷阱:你知道Integer内部高速缓冲区IntegerCache吗?
    Unicode 是不是只有两个字节,为什么能表示超过 65536 个字符
    java中Char到底是什么格式的编码
    Java中char和String 的深入理解
    关于serialVersionUID的说明
    Java中的instanceof和isInstance基础讲解
    编码(1)学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
    知识图谱和图卷积(贪心学院)——学习笔记
    索尼相机,索尼W35,Sony Cyber-shot DSC-w35
    高斯分布与高斯过程梳理
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3236348.html
Copyright © 2011-2022 走看看