/**************************************************/
/* 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. WinForm 根据屏幕分辨率自适应

    方法来自百度, 不算太好,但目前能满足需求.(窗口在LOAD的时候记录每个控件的坐标,每次窗口重绘的时候引时SizeChange事件,根据比率重新设置坐标) 以下是代码  AutoSizeFormCl ...

  2. 在C语言环境下使用google protobuf

    本文写给经常使用C编程且不喜欢C++而又要经常使用google protobuf的人.        经常写通讯程序的人对数据进行序列化或者反序列化时,可能经常使用google的protobuf(PB ...

  3. Flex之HTTPService组件调用

    1.采用<s:HTTPService>标签来实现: <?xml version="1.0" encoding="utf-8"?>< ...

  4. dom 侧栏分享

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. HTTP Status 500 - Servlet.init() for servlet htmlWebConfig threw exception

    HTTP Status 500 - Servlet.init() for servlet htmlWebConfig threw exception

  6. 可迭代的集合类型使用foreach语句

    在学习算法这本书图论那一部分的时候,接触到了几个类似for(int w:G.adj(v)),的语句,不是很理解,就去百度,发现这是一种叫做foreach的语法,在书的76页有讲到,但是之前没认真看书, ...

  7. Deep Learning 学习笔记——第9章

    总览: 本章所讲的知识点包括>>>> 1.描述卷积操作 2.解释使用卷积的原因 3.描述pooling操作 4.卷积在实践应用中的变化形式 5.卷积如何适应输入数据 6.CNN ...

  8. 【LeetCode】 Subsets

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  9. branch

    1.删除分支 git branch -d branch_name error: The branch 'branch_name' is not fully merged. If you are sur ...

  10. 32.怎样在Swift中实现TabBar和导航视图结合的项目?

    导航栏和TabBar结合的项目,在我们平常开发中会经常看到,下面我们通过自定义的TabBar来实现一个导航和TabBar结合的Demo. 1.自定义TabBar import UIKit class ...