Esempio n. 1
0
        public static void Serialize <T>(IArrayBufferWriter <byte> output, T obj, IFormatterResolver resolver)
        {
            using (var serializedData = MessagePackSerializer.SerializeUnsafe(obj, resolver))
            {
                var serializedDataLen = serializedData.Count;
                if ((uint)serializedDataLen < NotCompressionSize)
                {
                    // can't write direct, shoganai...
                    serializedData.Span.CopyTo(output.GetSpan(serializedDataLen));
                    output.Advance(serializedDataLen);
                    return;
                }

#if NET451
                var maxOutCount  = LZ4Codec.MaximumOutputLength(serializedDataLen);
                var outputBuffer = output.GetBuffer(c_lz4PackageHeaderSize + maxOutCount);
                // write body
                var serializedBuffer = serializedData.Buffer;
                var lz4Length        = LZ4Codec.Encode(serializedBuffer.Array, serializedBuffer.Offset, serializedBuffer.Count, outputBuffer.Array, outputBuffer.Offset + c_lz4PackageHeaderSize, outputBuffer.Count - c_lz4PackageHeaderSize);
#else
                var maxOutCount = LZ4Codec.MaximumOutputSize(serializedDataLen);
                var outputSpan  = output.GetSpan(c_lz4PackageHeaderSize + maxOutCount);
                // write body
                var lz4Length = LZ4Codec.Encode(serializedData.Span, outputSpan.Slice(c_lz4PackageHeaderSize));
#endif

                ref byte addr = ref output.Origin;
                MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref addr, 0, ExtensionTypeCode, lz4Length + 5);
                MessagePackBinary.WriteInt32ForceInt32Block(ref addr, 6, serializedDataLen);
                output.Advance(lz4Length + c_lz4PackageHeaderSize);
            }
Esempio n. 2
0
 public static void Serialize <T>(IArrayBufferWriter <byte> output, T obj) => Serialize(output, obj, null);
Esempio n. 3
0
 public static void Serialize(Type type, IArrayBufferWriter <byte> output, object obj)
 {
     GetOrAdd(type).serialize7.Invoke(output, obj);
 }
Esempio n. 4
0
 public static void Serialize(Type type, IArrayBufferWriter <byte> output, object obj, IFormatterResolver resolver)
 {
     GetOrAdd(type).serialize8.Invoke(output, obj, resolver);
 }
Esempio n. 5
0
 public static void Serialize <T>(IArrayBufferWriter <byte> output, T obj)
 {
     LZ4MessagePackSerializer.Serialize(output, obj, defaultResolver);
 }