private static void _SerializeMessages(ReusableMemoryStream stream, IEnumerable <Message> messages, SerializationInfo info) { if (info.CompressionCodec != CompressionCodec.None) { stream.Write(Basics.Zero64, 0, 8); using (var msgsetStream = stream.Pool.Reserve()) { SerializeMessagesUncompressed(msgsetStream, messages, info.Serializers, info.MessageVersion); using (var compressed = stream.Pool.Reserve()) { Basics.CompressStream(msgsetStream, compressed, info.CompressionCodec); var m = new Message { Value = compressed, TimeStamp = Timestamp.Now }; Basics.WriteWithSize(stream, m, new SerializationInfo { Serializers = SerializationConfig.ByteArraySerializers, CompressionCodec = info.CompressionCodec, MessageVersion = info.MessageVersion }, SerializeMessageWithCodec); } } } else { SerializeMessagesUncompressed(stream, messages, info.Serializers, info.MessageVersion); } }
private (int, long, long) SerializeRecordsWithCompression(ReusableMemoryStream target, CompressionCodec compression) { using (var uncompressedStream = target.Pool.Reserve()) { var resultOffsetAndTimestamps = SerializeRecords(uncompressedStream); using (var compressed = target.Pool.Reserve()) { Basics.CompressStream(uncompressedStream, compressed, compression); using (var tmpBuffer = target.Pool.Reserve()) { compressed.Position = 0; compressed.ReusableCopyTo(target, tmpBuffer); } return(resultOffsetAndTimestamps); } } }