No, non è così, ma ...
Ho appena aggiunto il supporto per la mia app GZipStream oggi, in modo da poter condividere un certo codice qui;
serializzazione:
using (Stream s = File.Create(PathName))
{
RijndaelManaged rm = new RijndaelManaged();
rm.Key = CryptoKey;
rm.IV = CryptoIV;
using (CryptoStream cs = new CryptoStream(s, rm.CreateEncryptor(), CryptoStreamMode.Write))
{
using (GZipStream gs = new GZipStream(cs, CompressionMode.Compress))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(gs, _instance);
}
}
}
deserializzazione:
using (Stream s = File.OpenRead(PathName))
{
RijndaelManaged rm = new RijndaelManaged();
rm.Key = CryptoKey;
rm.IV = CryptoIV;
using (CryptoStream cs = new CryptoStream(s, rm.CreateDecryptor(), CryptoStreamMode.Read))
{
using (GZipStream gs = new GZipStream(cs, CompressionMode.Decompress))
{
BinaryFormatter bf = new BinaryFormatter();
_instance = (Storage)bf.Deserialize(gs);
}
}
}
NOTA: se si utilizza CryptoStream, è un po importante catena (dis) zippare e (de) crypting proprio in questo modo, perché ti conviene perdere la tua entropia PRIMA la crittografia crea rumore dai tuoi dati.
fonte
2011-05-10 13:31:05
Le primitive sono felicemente ripetute fino alla nausea, l'unica "compressione" che si verifica è che sequenze ininterrotte di null (ad esempio in una matrice) vengono memorizzate come byte o numeri interi che rappresentano il numero nella sequenza. Le stringhe sono (in genere) non ripetute, le definizioni di classe non vengono ripetute e riferimenti a più oggetti non determinano la serializzazione/emissione di più volte l'oggetto. – Tao