/**************************************************/
/* 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. Java(jdk1.7) 陷阱

    String[] strA = new String[4]; for(int i=0; i<4; i++) { strA[i] = String.valueOf(i); } strA[0] = ...

  2. 第三百四十天 how can I 坚持

    感觉还是要制定个计划,做不做不到是一回事,但是得制定.目标,一年时间进小米,加油,fordream 计划好好想想,技不在多,精就好. 晚上写了写杨辉三角,都不记得什么是杨辉三角了. 人言落日是天涯,望 ...

  3. 第一百九十六天 how can I 坚持

    老妈邮的咸菜到了,美味啊,买不到,哈哈. 以后要勤给鱼换水啊,10天不换,水都臭了,拒绝懒惰. 明天要回济南了,刘松结婚,估计又没法发博客了. 两条鱼,一条罗娜,一条我,哈哈. 睡觉.

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

    上周日去蟒山摘的松子吗?应该是松子吧,裂开了呢.为啥呢.原来博客园可以上传图片,只是上传起来好费劲啊. 今天程哥问给我分的活多不多,我竟然说了句好多,哎.其实很多问题可以用还好来回答,还好,还行,哈哈 ...

  5. 用LinkedHashMap实现LRU算法

    (在学习操作系统时,要做一份有关LRU和clock算法的实验报告,很多同学都应该是通过数组去实现LRU,可能是对堆栈的使用和链表的使用不是很熟悉吧,在网上查资料时看到了LinkedHashMap,于是 ...

  6. POP3&SMTP&IMAP

    [POP3&SMTP&IMAP] IMAP是什么? IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上 ...

  7. CF160D

    题意:给你一个图,判断每条边是否在最小生成树MST上,不在输出none,如果在所有MST上就输出any,在某些MST上输出at least one: 分析:首先必须知道在最小生成树上的边的权值一定是等 ...

  8. Labview中的属性节点

    获取(读取)和/或设置(写入)引用的属性.通过属性节点对本地或远程应用程序实例.VI或对象获取或设置属性和方法也可通过属性节点访问LabVIEW类的私有数据. 属性节点可自动调整为用户所引用的对象的类 ...

  9. win2008 64位 + oracle11G 64位 IIS7.5 配置WEBSERVICE

    第一个错误: 安装过程依旧是那样简单,但在配好IIS站点,准备连接数据库的时候出错了,以下是错误提示:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更 ...

  10. Codeforces 118 D. Caesar's Legions (dp)

    题目链接:http://codeforces.com/contest/118/problem/D 有n个步兵和m个骑兵要排成一排,其中连续的步兵不能超过k1个,连续的骑兵不能超过k2个. dp[i][ ...