No, no lo hace, pero ...
Acabo de añadir soporte GZipStream para mi aplicación hoy en día, para poder compartir algo de código aquí;
serialización:
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);
}
}
}
Deserialización:
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: si utiliza CryptoStream, es poco importante que la cadena de (des) compresión y (de) crypting derecha de esta manera, porque querrás perder tu entropía ANTES de que el cifrado genere ruido a partir de tus datos.
Los primitivos se repiten felizmente hasta la saciedad, la única "compresión" que se produce es que las secuencias ininterrumpidas de nulos (por ejemplo, en una matriz) se almacenan como bytes o enteros que representan el número en la secuencia. Las cadenas (generalmente) no se repiten, las definiciones de clase no se repiten y las referencias a múltiples objetos no dan como resultado que el objeto se serialice/envíe varias veces. – Tao