Ejemplo n.º 1
0
        /// <summary>
        /// Decompresses bytes already compressed with CompressBytesIf function.
        /// </summary>
        /// <param name="input">Input array</param>
        /// <returns>Decompressed data</returns>
        public static byte[] DecompressBytesIf(byte[] input)
        {
            if (input == null)
            {
                throw new ArgumentOutOfRangeException("input");
            }

            if (input.Length < 1)
            {
                throw new ArgumentOutOfRangeException("input");
            }

            var compressed = input[0] == (byte)1;
            var data       = new byte[input.Length - 1];

            Array.Copy(input, 1, data, 0, input.Length - 1);

            if (compressed)
            {
                return(CacheCompression.DecompressBytes(data));
            }
            else
            {
                return(data);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Cache ten daha önce BinaryWrite ile serialize edilmiş bir veriyi okuyup BinaryWriter ile deserialize
 /// edilmesi için yardımcı fonksiyon. Kendisi bir memory stream ve bu memory stream üzerinde çalışan BinaryReader
 /// oluşturup, callback parametresinde belirtilen delegate i çağırır. Bu delegate çağrılmadan önce, verinin
 /// sıkıştırılmış olup olmadığı kontrol edilerek, gerekirse önce açılır.
 /// </summary>
 /// <param name="input">Deserialize edilecek veri. Bu verinin ilk baytı sıkıştırılma flag'idir. 1 ise sıkıştırılmış,
 /// 0 ise sıkıştırılmadan yazılmıştır.</param>
 /// <param name="deserialize">Asıl serialization ı gerçekleştirecek delegate</param>
 /// <returns>Deserialize edilmiş obje.</returns>
 public static TValue BinaryRead <TValue>(byte[] input, Func <BinaryReader, TValue> deserialize)
 {
     using (var ms = new MemoryStream(CacheCompression.DecompressBytesIf(input)))
         using (var sw = new BinaryReader(ms, Encoding.UTF8))
         {
             return(deserialize(sw));
         }
 }
Ejemplo n.º 3
0
        /// <summary xml:lang="tr">
        /// Cache e bir veri yazılmadan önce BinaryWriter ile serialize edilmesi için yardımcı fonksiyon.
        /// Kendisi bir memory stream ve bu memory stream üzerinde çalışan BinaryWriter oluşturup,
        /// callback parametresinde belirtilen delegate i çağırır. Daha sonra oluşan serialize edilmiş
        /// veriyi minCompressLength'ten büyük olması durumunda sıkıştırır.
        /// </summary>
        /// <param name="serialize">Asıl serialization ı gerçekleştirecek delegate</param>
        /// <param name="minCompressLength">Serialization sonucunda oluşan ham veri bu boyuttan büyükse
        /// sıkıştırılır, aksi taktirde ham olarak döndürülür.</param>
        /// <returns>Serialize edilmiş veri. Dizinin ilk byte ı eğer sıkıştırma yapılmışsa 1 dir,
        /// yapılmamışsa 0 dır.</returns>
        public static byte[] BinaryWrite(Action <BinaryWriter> serialize, int minCompressLength = 4096)
        {
            byte[] data;
            using (var ms = new MemoryStream())
                using (var sw = new BinaryWriter(ms, Encoding.UTF8))
                {
                    serialize(sw);
                    data = ms.ToArray();
                }

            return(CacheCompression.CompressBytesIf(data, minCompressLength));
        }