/**************************************************/
/* 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(,)-;
#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 = ; i < index; i++)
_arrList.Add();
_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不含有\0
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 == ) 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();//由于字符串中含有终止位
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 < || index >= _maxLength)
{
return ;
}
else
{
return _arrList[index];
}
}
set
{
if (!(index <= ))
{
_arrList[index] = value;
}
} }
#endregion } }

Blob未完成(待优化)的更多相关文章

  1. 关于InnoDB存储引擎text和blob类型的优化

    我们在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,如果单表的存储空间达到了近上百G或者大几十G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们有 ...

  2. innodb使用大字段text,blob的一些优化建议(转)

    原文 https://yq.aliyun.com/articles/9072 最近看到一些老应用,在表结构的设计上使用了text或者blob的字段:其中一个应用,对blob字段的依赖非常的严重,查询和 ...

  3. 大varchar,test,blob数据类型的优化

    set global innodb-file-format=Barracuda 其它优化,后续补充

  4. [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传

    <Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...

  5. 1125MySQL Sending data导致查询很慢的问题详细分析

    -- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...

  6. MySQL初级培训

    按照一个MySQL DBA在工作中接触到部分的先后顺序,编排培训目录如下. 字段选取 int , decimal, char , varchar , blob ,timestamp SQL优化 exp ...

  7. mysql慢查询问题

    [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没 ...

  8. MySQL Sending data导致查询很慢的问题详细分析【转载】

    转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...

  9. InnoDB 存储引擎的主要知识点介绍

    本文转载自:Draveness,略有修改 原文链接:『浅入浅出』MySQL 和 InnoDB · 面向信仰编程 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite ...

随机推荐

  1. jboss服务器配置多实例

    jboss配置多实例的重要性 在开发, 测试项目的过程中, 我们经常需要在同一台主机上, 同一个服务器上配置多个运行实例.这样做有一下几点好处: 在项目开发, 调试阶段能最大限度的节省资源 某个实例出 ...

  2. C# html互转mht

    using System;using System.Runtime.InteropServices;using System.Text;using System.IO;namespace HTMLCo ...

  3. C常用字符字符串处理函数

    1.strtok();字符串分片函数

  4. 第二百一十八天 how can I 坚持

    真的是自以为是吗?或许是我想太多. 今天下雪了,2015年入冬以来的第一场雪,好冷. 又是一周. 睡觉吧,明天老贾生日. 没啥了,中午有点肚子疼,冬天了要注意.

  5. CSS3每日一练之选择器-结构性伪类选择器

    <!DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <title> ...

  6. HDU 2042 不容易系列之二 [补6.24] 分类: ACM 2015-06-26 20:40 9人阅读 评论(0) 收藏

    不容易系列之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  7. 理解js闭包(二)

    @(编程) 一.什么是闭包? 官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他 ...

  8. hdu 4738 Caocao's Bridges(桥的最小权值+去重)

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操有一些岛屿被桥连接,每座都有士兵把守,周瑜想把这些岛屿分成两部分,但他只能炸毁一条桥,问最少 ...

  9. 咏南C/S开发框架支持最新的DELPHI XE8开发

    特大好消息:咏南C/S开发框架支持最新的DELPHI XE8开发!咏南开发框架让你再无开发工具升级后顾之忧! 购买咏南开发框架送项目源码!

  10. Python对象(译)

    这是一篇我翻译的文章,确实觉得原文写的非常好,简洁清晰 原文链接:http://effbot.org/zone/python-objects.htm ------------------------- ...