做.NET开发的同学,一套简单易用的基础类库是必不可少的,这里把我混迹C#圈子十余载珍藏的类库分享出来,希望能够给刚踏入开发门槛的朋友一些帮助。
后续我会逐步分享基础库的其余部分,先列个大纲:
C#个人珍藏基础类库分享 — 1、通用缓存帮助类CacheHelper
C#个人珍藏基础类库分享 — 2、Memcached缓存帮助类MemcachedHelper
C#个人珍藏基础类库分享 — 3、目录、文件帮助类FileHelper
C#个人珍藏基础类库分享 — 4、字节数组帮助类BytesObjectHelper
C#个人珍藏基础类库分享 — 5、日志帮助类LogHelper
C#个人珍藏基础类库分享 — 6、数据库处理帮助类SqlHelper
C#个人珍藏基础类库分享 — 7、Xml处理帮助类XmlHelper
C#个人珍藏基础类库分享 — 8、通用工具帮助类ToolHelper
字节数组处理的需求相对较少,在功能机时代网络带宽小,为了节约传输成本HTTP报文都会采用TLV的形式进行打包,这时候字节数组帮助类就有了用武之地。
下面开始进入正题:
1、构造函数
#region 构造函数
///
/// 初始化字节数组对象。
///
public BytesObject()
{
_objLen = _jumpLen;
_bytes = new byte[_jumpLen];
}
///
/// 初始化字节数组对象,并指定数组的初始长度。
///
/// 初始长度
public BytesObject(int initLength)
{
if (initLength < 1)
initLength = _jumpLen;
_objLen = initLength;
_bytes = new byte[initLength];
}
///
/// 初始化字节数组对象,并指定数组的初始长度与自增长度。
///
/// 初始长度
/// 跳跃长度(当数组长度不够时,程序将根据该值对数组进行扩容)
public BytesObject(int initLength, int jumpLength)
{
if (initLength < 1)
initLength = _jumpLen;
if (jumpLength < 1)
jumpLength = _jumpLen;
_jumpLen = jumpLength;
_objLen = initLength;
_bytes = new byte[initLength];
}
///
/// 初始化字节数组对象,并指定数组的初始长度、自增长度与默认使用的编码类型。
///
/// 初始长度
/// 跳跃长度(当数组长度不够时,程序将根据该值对数组进行扩容)
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public BytesObject(int initLength, int jumpLength, Encoding encodingType)
{
if (initLength < 1)
initLength = _jumpLen;
if (jumpLength < 1)
jumpLength = _jumpLen;
_jumpLen = jumpLength;
_objLen = initLength;
_encodingType = encodingType;
_bytes = new byte[initLength];
}
///
/// 初始化字节数组对象,并指定数组的默认编码类型。
///
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public BytesObject(Encoding encodingType)
{
_encodingType = encodingType;
_bytes = new byte[_jumpLen];
}
#endregion
2、追加新的字节数组方法
#region AddBytes
///
/// 追加新的字节数组
///
///
public void AddBytes(byte[] bytes)
{
addBytes(bytes);
}
///
/// 追加新的字节数组(依据一个BytesObject对象)
///
///
public void AddBytes(BytesObject bo)
{
addBytes(bo.Bytes);
}
///
/// 追加新的字节数组(依据一个Int8,byte类型数据)
///
///
public void AddBytes(byte bytesVal)
{
byte[] bytes = new byte[1];
bytes[0] = bytesVal;
addBytes(bytes);
}
///
/// 追加新的字节数组(依据一个UInt类型数据)
///
///
public void AddBytes(uint bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
addBytes(bytes);
}
///
/// 追加新的字节数组(依据一个Int16类型数据)
///
///
public void AddBytes(Int16 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
addBytes(bytes);
}
///
/// 追加新的字节数组(依据一个Int32类型数据)
///
///
public void AddBytes(Int32 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
addBytes(bytes);
}
///
/// 追加新的字节数组(依据一个Int64,long类型数据)
///
///
public void AddBytes(Int64 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((long)bytesVal));
addBytes(bytes);
}
///
/// 追加新的字节数组(依据String类型数据)
///
///
public void AddBytes(string bytesVal)
{
AddBytes(bytesVal, _encodingType, false);
}
///
/// 追加新的字节数组(依据String类型数据,支持编码类型)
///
///
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public void AddBytes(string bytesVal, Encoding encodingType)
{
AddBytes(bytesVal, encodingType, false);
}
///
/// 追加新的字节数组(依据String类型数据,可选择是否增加字节长度的定义)
///
///
///
public void AddBytes(string bytesVal, bool isVar)
{
AddBytes(bytesVal, _encodingType, isVar);
}
///
/// 追加新的字节数组(依据String类型数据,支持编码类型,可选择是否增加字节长度的定义)
///
///
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
///
public void AddBytes(string bytesVal, Encoding encodingType, bool isVar)
{
bytesVal = bytesVal ?? "";
byte[] bytes = encodingType.GetBytes(bytesVal);
if (isVar)
addBytes(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytes.Length)));
addBytes(bytes);
}
#endregion
3、前置新的字节数组方法
#region PreBytes
///
/// 前置新的字节数组
///
///
public void PreBytes(byte[] bytes)
{
preBytes(bytes);
}
///
/// 追加新的字节数组(依据一个BytesObject对象)
///
///
public void PreBytes(BytesObject bo)
{
preBytes(bo.Bytes);
}
///
/// 前置新的字节数组(依据一个Int8,byte类型数据)
///
///
public void PreBytes(byte bytesVal)
{
byte[] bytes = new byte[1];
bytes[0] = bytesVal;
preBytes(bytes);
}
///
/// 前置新的字节数组(依据一个UInt类型数据)
///
///
public void PreBytes(uint bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
preBytes(bytes);
}
///
/// 前置新的字节数组(依据一个Int16类型数据)
///
///
public void PreBytes(Int16 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
preBytes(bytes);
}
///
/// 前置新的字节数组(依据一个Int32类型数据)
///
///
public void PreBytes(Int32 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
preBytes(bytes);
}
///
/// 前置新的字节数组(依据一个Int64,long类型数据)
///
///
public void PreBytes(Int64 bytesVal)
{
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytesVal));
preBytes(bytes);
}
///
/// 前置新的字节数组(依据String类型数据)
///
///
public void PreBytes(string bytesVal)
{
PreBytes(bytesVal, _encodingType, false);
}
///
/// 前置新的字节数组(依据String类型数据,支持编码类型)
///
///
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public void PreBytes(string bytesVal, Encoding encodingType)
{
PreBytes(bytesVal, encodingType, false);
}
///
/// 前置新的字节数组(依据String类型数据,可选择是否增加字节长度的定义)
///
///
///
public void PreBytes(string bytesVal, bool isVar)
{
PreBytes(bytesVal, _encodingType, isVar);
}
///
/// 前置新的字节数组(依据String类型数据,支持编码类型,可选择是否增加字节长度的定义)
///
///
/// 对象的编码类型,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
///
public void PreBytes(string bytesVal, Encoding encodingType, bool isVar)
{
bytesVal = bytesVal ?? "";
byte[] bytes = encodingType.GetBytes(bytesVal);
preBytes(bytes);
if (isVar)
preBytes(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(bytes.Length)));
}
#endregion
4、追加TLV方法
#region AddTLV
///
/// 追加TLV(byte数据)
///
///
///
public void AddTLV(int t, byte[] v)
{
AddBytes(t);
AddBytes(v.Length);
AddBytes(v);
}
///
/// 追加TLV(BytesObject对象)
///
///
///
public void AddTLV(int t, BytesObject v)
{
byte[] bytes = v.Bytes;
AddBytes(t);
AddBytes(bytes.Length);
AddBytes(bytes);
}
///
/// 追加TLV(Int8,byte类型值)
///
///
///
public void AddTLV(int t, byte v)
{
AddBytes(t);
AddBytes(0x01);
AddBytes(v);
}
///
/// 追加TLV(uint类型值)
///
///
///
public void AddTLV(int t, uint v)
{
AddBytes(t);
AddBytes(0x04);
AddBytes(v);
}
///
/// 追加TLV(Int16类型值)
///
///
///
public void AddTLV(int t, Int16 v)
{
AddBytes(t);
AddBytes(0x02);
AddBytes(v);
}
///
/// 追加TLV(Int32类型值)
///
///
///
public void AddTLV(int t, Int32 v)
{
AddBytes(t);
AddBytes(0x04);
AddBytes(v);
}
///
/// 追加TLV(Int64,long类型值)
///
///
///
public void AddTLV(int t, Int64 v)
{
AddBytes(t);
AddBytes(0x08);
AddBytes(v);
}
///
/// 追加TLV(String类型值)
///
///
///
public void AddTLV(int t, string v)
{
AddBytes(t);
AddBytes(v, _encodingType, true);
}
///
/// 追加TLV(String类型值,支持编码类型)
///
///
///
/// 对象的编码类型,,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public void AddTLV(int t, string v, Encoding encodingType)
{
AddBytes(t);
AddBytes(v, encodingType, true);
}
#endregion
5、前置TLV方法
#region PreTLV
///
/// 前置TLV(byte数据)
///
///
///
public void PreTLV(int t, byte[] v)
{
PreBytes(v);
PreBytes(v.Length);
PreBytes(t);
}
///
/// 前置TLV(BytesObject对象)
///
///
///
public void PreTLV(int t, BytesObject v)
{
byte[] bytes = v.Bytes;
PreBytes(bytes);
PreBytes(bytes.Length);
PreBytes(t);
}
///
/// 前置TLV(Int8,byte类型值)
///
///
///
public void PreTLV(int t, byte v)
{
PreBytes(v);
PreBytes(0x01);
PreBytes(t);
}
///
/// 前置TLV(uint类型值)
///
///
///
public void PreTLV(int t, uint v)
{
PreBytes(v);
PreBytes(0x04);
PreBytes(t);
}
///
/// 前置TLV(Int16类型值)
///
///
///
public void PreTLV(int t, Int16 v)
{
PreBytes(v);
PreBytes(0x02);
PreBytes(t);
}
///
/// 前置TLV(Int32类型值)
///
///
///
public void PreTLV(int t, Int32 v)
{
PreBytes(v);
PreBytes(0x04);
PreBytes(t);
}
///
/// 前置TLV(Int64,long类型值)
///
///
///
public void PreTLV(int t, Int64 v)
{
PreBytes(v);
PreBytes(0x08);
PreBytes(t);
}
///
/// 前置TLV(String类型值)
///
///
///
public void PreTLV(int t, string v)
{
PreBytes(v, _encodingType, true);
PreBytes(t);
}
///
/// 前置TLV(String类型值,支持编码类型)
///
///
///
/// 对象的编码类型,,如常用的有:Unicode/UTF-8/UTF-16/GB2312/ASCII/...
public void PreTLV(int t, string v, Encoding encodingType)
{
PreBytes(v, encodingType, true);
PreBytes(t);
}
#endregion