Feedback

C# - Serialisiert Typ in ein komprimiertes bytearray

Veröffentlicht von am 21.08.2007
(2 Bewertungen)
Serialisiert Typ in ein komprimiertes bytearray und wieder zurück
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization.Formatters.Binary;

/// <summary>
/// Static class which provides Helperfunctions for De/Compression
/// </summary>
public static class CompressionHelpers
{
    public static byte[] CompressTypeToByteArray<T>(T input) where T : class
    {
        byte[] uncompressed = SerializeTypeToByteArray(input);
        return CompressByteArray(uncompressed);
    }

    public static T DecompressByteArrayToType<T>(byte[] buffer) where T : class
    {
        byte[] decompressed = DecompressByteArray(buffer);
        return DeserializeByteArrayToType<T>(
            decompressed);
    }


    public static byte[] DecompressByteArray(byte[] compressedByteArray)
    {
        MemoryStream compressedStream = new MemoryStream(compressedByteArray);
        DeflateStream compressedzipStream =
            new DeflateStream(compressedStream, CompressionMode.Decompress, true);
        MemoryStream decompressedStream = new MemoryStream();
        const int blockSize = 1024;

        byte[] buffer = new byte[blockSize];
        int bytesRead;
        while ((bytesRead = compressedzipStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            decompressedStream.Write(buffer, 0, bytesRead);
        }

        compressedzipStream.Close();
        decompressedStream.Position = 0;
        byte[] decompressedArray = decompressedStream.ToArray();
        decompressedStream.Close();
        decompressedStream.Dispose();
        compressedzipStream.Close();
        compressedzipStream.Dispose();
        return decompressedArray;
    }

    public static byte[] CompressByteArray(byte[] uncompressedByteArray)
    {
        MemoryStream msCompressed = new MemoryStream();
        DeflateStream compressedzipStream =
            new DeflateStream(msCompressed, CompressionMode.Compress, true);

        compressedzipStream.Write(uncompressedByteArray, 0, uncompressedByteArray.Length);
        compressedzipStream.Flush();
        compressedzipStream.Close();

        byte[] compressedByteArray = msCompressed.ToArray();
        msCompressed.Close();
        msCompressed.Dispose();

        return compressedByteArray;
    }

    public static T DeserializeStreamToType<T>(Stream stream) where T : class
    {
        BinaryFormatter bf = new BinaryFormatter();
        T users = bf.Deserialize(stream) as T;
        return users;
    }

    public static T DeserializeByteArrayToType<T>(byte[] stream) where T : class
    {
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream(stream);
        T users = bf.Deserialize(ms) as T;
        ms.Close();
        ms.Dispose();
        return users;
    }

    public static byte[] SerializeTypeToByteArray<T>(T input) where T : class
    {
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms, input);

        byte[] array = ms.ToArray();
        ms.Close();
        ms.Dispose();
        return array;
    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!