コード例 #1
0
ファイル: Int64Serializer.cs プロジェクト: navirius/bitcare
        // Serialization
        public void Serialize(Int64 valueToSerialize)
        {
            // Is it default value
            if (valueToSerialize == 0)
            {
                SerializerStorage.WriteStorageFormat(new DefaultValue());
                return;
            }

            // Should we store value in main data stream?
            if (valueToSerialize > 0 && valueToSerialize <= ValueInConfig.MaxValueToStoreInConfig)
            {
                // We can store value in config
                SerializerStorage.WriteStorageFormat(new ValueInConfig(valueToSerialize));
            }
            else
            {
                byte[] packedData = BitToolkit.ConvertInt64ToByteArray(valueToSerialize);
                SerializerStorage.WriteStorageFormat(new ValueInDataStream((byte)packedData.Length));
                SerializerStorage.WritePackedData(packedData);
            }
        }
コード例 #2
0
        // Serialization of internal data to byte array (Final step of serialization)
        public byte[] ToByteArray()
        {
            int StorageFormatIds_ByteArraySize  = StorageFormatIds.GetByteArraySize();
            int StorageFormatData_ByteArraySize = StorageFormatData.GetByteArraySize();
            int PackedData_ByteArraySize        = PackedData.ByteArraySize;

            byte[] storageFormatIdsSizeBytes  = BitToolkit.EncodeSize(StorageFormatIds_ByteArraySize);
            byte[] storageFormatDataSizeBytes = BitToolkit.EncodeSize(StorageFormatData_ByteArraySize);
            byte[] packedDataSizeBytes        = BitToolkit.EncodeSize(PackedData_ByteArraySize);

            // Storage estimated size
            int estimatedSize = StorageFormatIds_ByteArraySize + StorageFormatData_ByteArraySize + PackedData_ByteArraySize;

            // Serializer configuration
            SerializerConfiguration serConfig = new SerializerConfiguration();

            serConfig.SerializerFormatVersion = m_SerializerFormatVersion;

            // Compress if we have necessary data already
            if (ActiveCompressionType != CompressionType.NoCompression && estimatedSize > CompressionThreshold)
            {
                serConfig.CompressionType = ActiveCompressionType;
            }

            // Should we compress data?
            if (serConfig.IsCompressed)
            {
                byte[] rawDataAggregated = new byte[storageFormatIdsSizeBytes.Length + storageFormatDataSizeBytes.Length + packedDataSizeBytes.Length +
                                                    StorageFormatIds_ByteArraySize + StorageFormatData_ByteArraySize + PackedData_ByteArraySize];

                int destIndex = 0;

                // Store StorageFormatIds bytes
                byte[] tmpArray = storageFormatIdsSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                StorageFormatIds.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += StorageFormatIds_ByteArraySize;

                // Store StorageFormatData bytes
                tmpArray = storageFormatDataSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                StorageFormatData.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += StorageFormatData_ByteArraySize;

                // Store PackedData bytes
                tmpArray = packedDataSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                PackedData.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += PackedData_ByteArraySize;

                // Compressed result
                byte[] compressedContent = CompressionFactory.GetCompressionEngine(ActiveCompressionType).Compress(rawDataAggregated, ActiveCompressionLevel);

                // Encode config
                byte[] serConfigBytes = serConfig.ToByteArray();

                // Buffer for final result
                byte[] result = new byte[serConfigBytes.Length + compressedContent.Length];

                // Copy config info
                Array.Copy(serConfigBytes, 0, result, 0, serConfigBytes.Length);

                // Copy compressed content
                Array.Copy(compressedContent, 0, result, serConfigBytes.Length, compressedContent.Length);

                return(result);
            }
            else
            {
                // No compression necessary - we store raw data

                // Encode config
                byte[] serConfigBytes = serConfig.ToByteArray();

                byte[] rawDataAggregated = new byte[serConfigBytes.Length + storageFormatIdsSizeBytes.Length + storageFormatDataSizeBytes.Length + packedDataSizeBytes.Length +
                                                    StorageFormatIds_ByteArraySize + StorageFormatData_ByteArraySize + PackedData_ByteArraySize];

                int destIndex = 0;

                // Store Serialization Configuration bytes
                byte[] tmpArray = serConfigBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                // Store StorageFormatIds bytes
                tmpArray = storageFormatIdsSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                StorageFormatIds.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += StorageFormatIds_ByteArraySize;

                // Store StorageFormatData bytes
                tmpArray = storageFormatDataSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                StorageFormatData.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += StorageFormatData_ByteArraySize;

                // Store PackedData bytes
                tmpArray = packedDataSizeBytes;
                Array.Copy(tmpArray, 0, rawDataAggregated, destIndex, tmpArray.Length);
                destIndex += tmpArray.Length;

                PackedData.StoreBytesInByteArray(rawDataAggregated, destIndex);
                destIndex += PackedData_ByteArraySize;

                return(rawDataAggregated);
            }
        }