コード例 #1
0
        internal static byte[] Compression(byte[] data, int offset, int count)
        {
            if (null == data)
            {
                throw new ArgumentNullException(nameof(data));
            }
            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(offset), "Non-negative number required.");
            }
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(count), "Non-negative number required.");
            }
            if (data.Length - offset < count)
            {
                throw new ArgumentException("Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.");
            }

            using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledOutputStream.Object;
                outputStream.Reinitialize(count);
#if NET40
                using (var gzWriter = new GZipStream(outputStream, CompressionMode.Compress, true))
#else
                using (var gzWriter = new GZipStream(outputStream, CompressionLevel.Fastest, true))
#endif
                {
                    gzWriter.Write(data, offset, count);
                }

                return(outputStream.ToByteArray());
            }
        }
コード例 #2
0
        /// <summary>Serializes the specified item.</summary>
        /// <param name="formatter">The formatter.</param>
        /// <param name="item">The item.</param>
        /// <param name="serializerSettings">The <see cref="JsonSerializerSettings"/> used to configure the <see cref="JsonSerializer"/>.</param>
        /// <param name="effectiveEncoding">The encoding.</param>
        /// <param name="initialBufferSize">The initial buffer size.</param>
        /// <returns></returns>
        public static ArraySegment <byte> WriteToMemoryPool(this IJsonMessageFormatter formatter, object item,
                                                            JsonSerializerSettings serializerSettings, Encoding effectiveEncoding = null, int initialBufferSize = c_initialBufferSize)
        {
            //#if NET40
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(initialBufferSize, BufferManager.Shared);

                formatter.WriteToStream(item?.GetType(), item, outputStream, effectiveEncoding, serializerSettings);
                return(outputStream.ToArraySegment());
            }
            //#else
            //      using (var pooledPipe = PipelineManager.Create())
            //      {
            //        var pipe = pooledPipe.Object;
            //        var outputStream = new PipelineStream(pipe, initialBufferSize);
            //        formatter.WriteToStream(item?.GetType(), item, outputStream, effectiveEncoding, serializerSettings);
            //        pipe.Flush();
            //        var readBuffer = pipe.Reader.ReadAsync().GetResult().Buffer;
            //        var length = (int)readBuffer.Length;
            //        if (c_zeroSize == length) { return s_emptySegment; }
            //        var buffer = BufferManager.Shared.Rent(length);
            //        readBuffer.CopyTo(buffer);
            //        return new ArraySegment<byte>(buffer, 0, length);
            //      }
            //#endif
        }
コード例 #3
0
        internal static ArraySegmentWrapper <byte> Decompression(byte[] compressedData, int offset, int count, BufferManager bufferManager)
        {
            if (null == bufferManager)
            {
                throw new ArgumentNullException(nameof(bufferManager));
            }

            using (var inputStream = new MemoryStream(compressedData, offset, count))
            {
                var bufferSize = count * 2;
                var buffer     = bufferManager.TakeBuffer(bufferSize);
                try
                {
                    using (var gzReader = new GZipStream(inputStream, CompressionMode.Decompress))
                        using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
                        {
                            var outputStream = pooledOutputStream.Object;
                            outputStream.Reinitialize(bufferSize, bufferManager);
                            var readBytes = 0;
                            while ((readBytes = gzReader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                outputStream.Write(buffer, 0, readBytes);
                            }

                            return(outputStream.ToArraySegment());
                        }
                }
                finally
                {
                    bufferManager.ReturnBuffer(buffer);
                }
            }
        }
コード例 #4
0
        internal static ArraySegmentWrapper <byte> Compression(byte[] data, BufferManager bufferManager)
        {
            if (null == data)
            {
                throw new ArgumentNullException(nameof(data));
            }
            if (null == bufferManager)
            {
                throw new ArgumentNullException(nameof(bufferManager));
            }

            using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledOutputStream.Object;
                outputStream.Reinitialize(data.Length, bufferManager);
#if NET40
                using (var gzWriter = new GZipStream(outputStream, CompressionMode.Compress, true))
#else
                using (var gzWriter = new GZipStream(outputStream, CompressionLevel.Fastest, true))
#endif
                {
                    gzWriter.Write(data, 0, data.Length);
                }

                return(outputStream.ToArraySegment());
            }
        }
コード例 #5
0
        internal static byte[] Decompression(byte[] compressedData)
        {
            if (null == compressedData)
            {
                throw new ArgumentNullException(nameof(compressedData));
            }

            var bufferManager = BufferManager.GlobalManager;
            var bufferSize    = compressedData.Length * 2;
            var buffer        = bufferManager.TakeBuffer(bufferSize);

            try
            {
                using (var inputStream = new MemoryStream(compressedData, 0, compressedData.Length))
                    using (var gzReader = new GZipStream(inputStream, CompressionMode.Decompress))
                        using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
                        {
                            var outputStream = pooledOutputStream.Object;
                            outputStream.Reinitialize(bufferSize, bufferManager);
                            var readBytes = 0;
                            while ((readBytes = gzReader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                outputStream.Write(buffer, 0, readBytes);
                            }

                            return(outputStream.ToByteArray());
                        }
            }
            finally
            {
                bufferManager.ReturnBuffer(buffer);
            }
        }
コード例 #6
0
        internal static byte[] Decompression(byte[] compressedData, int offset, int count)
        {
            using (var inputStream = new MemoryStream(compressedData, offset, count))
            {
                var bufferManager = BufferManager.GlobalManager;
                var bufferSize    = count * 2;
                var buffer        = bufferManager.TakeBuffer(bufferSize);
                try
                {
                    using (var gzReader = new GZipStream(inputStream, CompressionMode.Decompress))
                        using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
                        {
                            var outputStream = pooledOutputStream.Object;
                            outputStream.Reinitialize(bufferSize, bufferManager);
                            var readBytes = 0;
                            while ((readBytes = gzReader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                outputStream.Write(buffer, 0, readBytes);
                            }

                            return(outputStream.ToByteArray());
                        }
                }
                finally
                {
                    bufferManager.ReturnBuffer(buffer);
                }
            }
        }
コード例 #7
0
        /// <summary>Serializes the specified object to a JSON string using a type, formatting and <see cref="JsonSerializer"/>.</summary>
        /// <param name="jsonSerializerPool">The <see cref="JsonSerializer"/> pool used to serialize the object</param>
        /// <param name="value">The object to serialize.</param>
        /// <param name="type">The type of the value being serialized.
        /// This parameter is used when <see cref="JsonSerializer.TypeNameHandling"/> is <see cref="TypeNameHandling.Auto"/> to write out the type name if the type of the value does not match.
        /// Specifying the type is optional.</param>
        /// <param name="initialBufferSize"></param>
        /// <returns>A JSON string representation of the object.</returns>
        public static ArraySegment <byte> SerializeToMemoryPool(this ObjectPool <JsonSerializer> jsonSerializerPool, object value, Type type = null, int initialBufferSize = c_initialBufferSize)
        {
            var jsonSerializer = jsonSerializerPool.Take();
            var outputStream   = BufferManagerOutputStreamManager.Take();

            outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

            try
            {
                using (JsonTextWriter jsonWriter = new JsonTextWriter(new StreamWriterX(outputStream, UTF8NoBOM)))
                {
                    jsonWriter.ArrayPool   = JsonConvertX.GlobalCharacterArrayPool;
                    jsonWriter.CloseOutput = false;
                    jsonWriter.Formatting  = jsonSerializer.Formatting;

                    jsonSerializer.Serialize(jsonWriter, value, type);
                    jsonWriter.Flush();
                }
                return(outputStream.ToArraySegment());
            }
            finally
            {
                BufferManagerOutputStreamManager.Return(outputStream);
                jsonSerializerPool.Return(jsonSerializer);
            }
        }
コード例 #8
0
        public virtual byte[] SerializeObject(object item, int initialBufferSize)
        {
            //#if NET40
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

                WriteToStream(item, outputStream);
                return(outputStream.ToByteArray());
            }
            //#else
            //      using (var pooledPipe = PipelineManager.Create())
            //      {
            //        var pipe = pooledPipe.Object;
            //        var outputStream = new PipelineStream(pipe, initialBufferSize);
            //        WriteToStream(item, outputStream);
            //        pipe.Flush();
            //        var readBuffer = pipe.Reader.ReadAsync().GetResult().Buffer;
            //        var length = (int)readBuffer.Length;
            //        if (c_zeroSize == length) { return EmptyArray<byte>.Instance; }
            //        return readBuffer.ToArray();
            //      }
            //#endif
        }
        /// <summary>Serializes the specified item.</summary>
        /// <param name="item">The item.</param>
        /// <param name="initialBufferSize">The initial buffer size.</param>
        /// <returns></returns>
        public virtual ArraySegment <byte> WriteToMemoryPool(object item, int initialBufferSize)
        {
            //#if NET40
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

                WriteToStream(item, outputStream);
                return(outputStream.ToArraySegment());
            }
            //#else
            //      using (var pooledPipe = PipelineManager.Create())
            //      {
            //        var pipe = pooledPipe.Object;
            //        var outputStream = new PipelineStream(pipe, initialBufferSize);
            //        formatter.WriteToStream(item, outputStream);
            //        pipe.Flush();
            //        var readBuffer = pipe.Reader.ReadAsync().GetResult().Buffer;
            //        var length = (int)readBuffer.Length;
            //        if (c_zeroSize == length) { return s_emptySegment; }
            //        var buffer = BufferManager.Shared.Rent(length);
            //        readBuffer.CopyTo(buffer);
            //        return new ArraySegment<byte>(buffer, 0, length);
            //      }
            //#endif
        }
コード例 #10
0
        public virtual byte[] Serialize <T>(T item, int initialBufferSize)
        {
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

                WriteToStream <T>(item, outputStream);
                return(outputStream.ToByteArray());
            }
        }
        /// <summary>Serializes the specified item.</summary>
        /// <param name="item">The item.</param>
        /// <param name="initialBufferSize">The initial buffer size.</param>
        /// <returns></returns>
        public virtual ArraySegment <byte> WriteToMemoryPool <T>(T item, int initialBufferSize)
        {
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

                WriteToStream <T>(item, outputStream);
                return(outputStream.ToArraySegment());
            }
        }
コード例 #12
0
        public byte[] SystemBufferArrayPool()
        {
            using (var pooledStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledStream.Object;
                outputStream.Reinitialize(c_initialBufferSize, ArrayPool <byte> .Shared);

                _formatter.WriteToStream(_persionData, outputStream);
                return(outputStream.ToByteArray());
            }
        }
コード例 #13
0
        /// <summary>Serializes the specified object to a JSON string using a type, formatting and <see cref="JsonSerializer"/>.</summary>
        /// <param name="jsonSerializer">The <see cref="JsonSerializer"/> used to serialize the object</param>
        /// <param name="value">The object to serialize.</param>
        /// <param name="type">The type of the value being serialized.
        /// This parameter is used when <see cref="JsonSerializer.TypeNameHandling"/> is <see cref="TypeNameHandling.Auto"/> to write out the type name if the type of the value does not match.
        /// Specifying the type is optional.</param>
        /// <param name="initialBufferSize"></param>
        /// <returns>A JSON string representation of the object.</returns>
        public static byte[] SerializeToByteArray(this JsonSerializer jsonSerializer, object value, Type type = null, int initialBufferSize = c_initialBufferSize)
        {
            using (var pooledOutputStream = BufferManagerOutputStreamManager.Create())
            {
                var outputStream = pooledOutputStream.Object;
                outputStream.Reinitialize(initialBufferSize, s_sharedBufferPool);

                using (JsonTextWriter jsonWriter = new JsonTextWriter(new StreamWriterX(outputStream, UTF8NoBOM)))
                {
                    jsonWriter.ArrayPool   = JsonConvertX.GlobalCharacterArrayPool;
                    jsonWriter.CloseOutput = false;
                    jsonWriter.Formatting  = jsonSerializer.Formatting;

                    jsonSerializer.Serialize(jsonWriter, value, type);
                    jsonWriter.Flush();
                }
                return(outputStream.ToByteArray());
            }
        }