C#个人珍藏基础类库分享 — 4、字节数组帮助类BytesObjectHelper

        做.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

你可能感兴趣的:(C#,分享,c#,开发语言,asp.net,学习)