Example #1
0
        public static void Serialize(object o, BufferPollManager poolmanager, ref int bufferindex, ref long size, ref byte[] serbyte, bool compress = true)
        {
            MemoryStreamWriter writer = new MemoryStreamWriter(poolmanager);

            Serialize(o, writer);
            bufferindex = writer.Bufferindex;
            size        = writer.GetDataLen();

            if (bufferindex == -1)
            {
                serbyte = writer.GetBytes();
                if (compress && size - 8 > minGZIPCompressLenth)
                {
                    var compressBytes = GZip.Compress(serbyte.Skip(8).Take((int)size - 8).ToArray());
                    size    = 8 + compressBytes.Length;
                    serbyte = new byte[size];
                    for (int i = 0; i < compressBytes.Length; i++)
                    {
                        serbyte[i + 8] = compressBytes[i];
                    }
                }
            }
            else
            {
                if (compress && size - 8 > minGZIPCompressLenth)
                {
                    var offset        = poolmanager.GetOffset(bufferindex);
                    var compressBytes = GZip.Compress(poolmanager.Buffer.Skip(offset + 8).Take((int)size - 8).ToArray());
                    size = 8 + compressBytes.Length;
                    for (int i = 0; i < compressBytes.Length; i++)
                    {
                        poolmanager.Buffer[offset + 8 + i] = compressBytes[i];
                    }
                }
            }
        }