/// <summary> /// 释放缓冲区 /// </summary> /// <param name="buffer">缓冲区</param> public static unsafe void FreeOnly(ref subArray <byte> buffer) { if (buffer.UnsafeArray.length() == buffers.Size) { fixed(byte *bufferFixed = buffer.UnsafeArray) { if (Interlocked.Decrement(ref *(int *)bufferFixed) == 0) { buffers.PushNotNull(buffer.UnsafeArray); } } } }
/// <summary> /// 获取压缩数据 /// </summary> /// <param name="data">数据</param> /// <param name="memoryPool">数据缓冲区内存池</param> /// <param name="seek">起始位置</param> /// <returns>压缩数据,失败返回null</returns> internal static subArray <byte> GetCompress(ref subArray <byte> data, memoryPool memoryPool = null, int seek = 0) { if (data.length > GZipSize) { subArray <byte> compressData = stream.GZip.GetCompress(data.array, data.startIndex, data.length, seek, memoryPool); if (compressData.length != 0) { if (compressData.length + GZipSize < data.length) { return(compressData); } if (memoryPool != null) { memoryPool.PushNotNull(compressData.array); } } } return(default(subArray <byte>)); }