Нет, это не так, но ...
Я просто добавил поддержку GZipStream для моего приложения сегодня, так что я могу поделиться некоторый код здесь;
Сериализация:
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);
}
}
}
Десериализация:
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);
}
}
}
Примечание: если вы используете CryptoStream, это своего рода важно, что вы цепи (не) проносясь и (де) криптование право таким образом, потому что вы хотите потерять свою энтропию ПЕРЕД шифрованием создает шум из ваших данных.
Примитивы счастливо повторяются ad nauseam, единственное «сжатие», которое происходит, состоит в том, что непрерывные последовательности нулей (например, в массиве) сохраняются в виде байтов или целых чисел, представляющих число в последовательности. Строки (обычно) не повторяются, определения классов не повторяются, а множественные ссылки на объекты не приводят к тому, что объект сериализуется/выводится несколько раз. – Tao