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(,)-;
#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未完成(待优化)的更多相关文章
- 关于InnoDB存储引擎text和blob类型的优化
我们在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,如果单表的存储空间达到了近上百G或者大几十G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们有 ...
- innodb使用大字段text,blob的一些优化建议(转)
原文 https://yq.aliyun.com/articles/9072 最近看到一些老应用,在表结构的设计上使用了text或者blob的字段:其中一个应用,对blob字段的依赖非常的严重,查询和 ...
- 大varchar,test,blob数据类型的优化
set global innodb-file-format=Barracuda 其它优化,后续补充
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
<Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...
- 1125MySQL Sending data导致查询很慢的问题详细分析
-- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...
- MySQL初级培训
按照一个MySQL DBA在工作中接触到部分的先后顺序,编排培训目录如下. 字段选取 int , decimal, char , varchar , blob ,timestamp SQL优化 exp ...
- mysql慢查询问题
[问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没 ...
- MySQL Sending data导致查询很慢的问题详细分析【转载】
转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...
- InnoDB 存储引擎的主要知识点介绍
本文转载自:Draveness,略有修改 原文链接:『浅入浅出』MySQL 和 InnoDB · 面向信仰编程 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite ...
随机推荐
- 浅谈w3c标准
#浅谈w3c标准 ##w3c标准是什么 w3c标准包括多个方面,官方是从应用角度分的,相关的文档可以戳[这里](http://www.w3.org/standards/).如果从WEB技术角度,可以分 ...
- spring mvc中的valid
当你希望在spring mvc中直接校验表单参数时,你可以采用如下操作: 声明Validator的方式: 1.为每一个Controller声明一个Validator @Controller publi ...
- LightOJ 1370 - Bi-shoe and Phi-shoe (欧拉函数思想)
http://lightoj.com/volume_showproblem.php?problem=1370 Bi-shoe and Phi-shoe Time Limit:2000MS Me ...
- C# 数据类型详解
在asp.net中C#数据类型包括有值类型.简单类型.整型.布尔型.字符型.浮点型.结构类型等等,有需要学习的朋友可进入参考参考. 4.1 值类型 各种值类型总是含有相应该类型的一个值.C#迫使你初始 ...
- magento目录结构精编版
1 /app – 程序根目录 2 3 /app/etc – 全局配置文件目录 4 5 /app/code – 所有模块安装其模型和控制器的目录 6 7 /app/code/core – 核心代码或经过 ...
- 使用Visual Leak Detector检测内存泄漏[转]
1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题 ...
- Java的初步认识
PS:弥补那些错过的时间,弥补那些本是决定做而没有做的事情,当初说好了学习编程要把自己学到的或是理解的写到博客中记录下来,可是由于各种缘由最终是没有实现...经过几番周折决定把那些丢掉的重新捡起来.对 ...
- android wifi总结
大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的w ...
- TCommThread -- 在delphi线程中实现消息循环
http://www.techques.com/question/1-4073197/How-do-I-send-and-handle-message-between-TService-parent- ...
- WatchKit App Submission Issues
查看原文: http://leancodingnow.com/watchkit-app-submission-issues/ I submitted a new version of my app P ...