Ho appena aggiunto il supporto GZipStream per la mia app oggi, quindi posso condividere del 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 19:22:16
grazie, questo è stato davvero utile, come sarebbe la decompressione ... mai usato BinaryFormatter prima. –
Grazie per averlo facilmente modificato + pastable nel mio codice. Formatto le cose abbastanza spesso che ora è solo un frammento che posso facilmente trovare su Google. +1 –