/// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="startIndex">需要载入数据额外处理的开始位置</param> /// <param name="length">需要载入数据额外处理的数据长度 -1为,开始INDEX到结束位置,-2就是保留最后1位</param> /// <param name="dataExtraCallBack"> 数据包在读取前需要额外的处理回调方法。(例如加密,解压缩等)</param> public ReadBytes(Byte[] data, int startIndex, int length, RDataExtraHandle dataExtraCallBack) { try { this.startIndex = startIndex; this.Length = data.Length; if (length < 0) { endlengt = (data.Length + length + 1) - startIndex; } else { endlengt = length; } byte[] handBytes = new byte[this.startIndex]; Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组 byte[] endBytes = new byte[data.Length - (startIndex + endlengt)]; Buffer.BlockCopy(data, (startIndex + endlengt), endBytes, 0, endBytes.Length); //首先保存不需要解密的数组 byte[] NeedExByte = new byte[endlengt]; Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length); if (dataExtraCallBack != null) { NeedExByte = dataExtraCallBack(NeedExByte); } Data = new byte[handBytes.Length + NeedExByte.Length + endBytes.Length]; //重新整合解密完毕后的数据包 Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length); Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length); Buffer.BlockCopy(endBytes, 0, Data, (handBytes.Length + NeedExByte.Length), endBytes.Length); current = 0; IsDataExtraSuccess = true; } catch { IsDataExtraSuccess = false; } }
public ReadBytesV2(Byte[] data, RDataExtraHandle dataExtraCallBack) { try { if (data[0] == 0xff) { base.current = 1; } Data = data; this.startIndex = ReadHeadLengt(); this.Length = data.Length; endlengt = Length - startIndex; byte[] handBytes = new byte[this.startIndex]; Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组 byte[] NeedExByte = new byte[endlengt]; Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length); if (dataExtraCallBack != null) { NeedExByte = dataExtraCallBack(NeedExByte); } Data = new byte[handBytes.Length + NeedExByte.Length]; //重新整合解密完毕后的数据包 Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length); Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length); current = 0; IsDataExtraSuccess = true; } catch { IsDataExtraSuccess = false; } }
public ReadBytesV2(Byte[] data, RDataExtraHandle dataExtraCallBack) { try { //if (data[0] == 0xff) // base.current = 1; Data = data; this.startIndex = ReadHeadLengt(); this.Length = data.Length; endlengt = Length - startIndex; byte[] handBytes = new byte[this.startIndex]; Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组 byte[] NeedExByte = new byte[endlengt]; Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length); if (dataExtraCallBack != null) NeedExByte = dataExtraCallBack(NeedExByte); Data = new byte[handBytes.Length + NeedExByte.Length]; //重新整合解密完毕后的数据包 Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length); Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length); current = 0; IsDataExtraSuccess = true; } catch { IsDataExtraSuccess = false; } }