作用:此類在 .NET Framework 2.0 版中是新增的。提供用於壓縮和解壓縮流的方法和屬性。
下面給出兩個具體Demo:
//壓縮字節 //1.創建壓縮的數據流 //2.設定compressStream為存放被壓縮的文件流,並設定為壓縮模式 //3.將需要壓縮的字節寫到被壓縮的文件流 public static byte[] CompressBytes(byte[] bytes) { using(MemoryStream compressStream = new MemoryStream()) { using(var zipStream = new GZipStream(compressStream, CompressMode.ComPress)) zipStream.Write(bytes, 0, bytes.Length); return compressStream.ToArray(); } } //解壓縮字節 //1.創建被壓縮的數據流 //2.創建zipStream對象,並傳入解壓的文件流 //3.創建目標流 //4.zipStream拷貝到目標流 //5.返回目標流輸出字節 public static byte[] Decompress(byte[] bytes) { using(var compressStream = new MemoryStream(bytes)) { using(var zipStream = new GZipStream(compressStream, CompressMode.DeCompress)) { using(var resultStream = new MemoryStream()) { zipStream.CopyTo(resultStream); return resultStream.ToArray(); } } } }
//壓縮字節流寫入壓縮文件中
public static void ToJson(PropertiesDB db, string path) { JArray o = new JArray(); o.Add(0); db.ObjectsAttr.ToList().ForEach(a => { o.Add(new JArray { a.Name, a.Category, a.DataType, a.DataTypeContext, a.Description, a.DisplayName, a.Flags, a.DisplayPrecision }); }); //File.WriteAllText(Application.StartupPath + "\\objects_attrs.json", JsonConvert.SerializeObject(o)); CompressBytes(path + "\\objects_attrs.json.gz", JsonConvert.SerializeObject(o)); var avs = new List<long>(); var offs = new List<int>();long eid = 0; int index = 0; db.ObjectsEav.OrderBy(x => x.EntityId).ToList().ForEach(v => { if (eid != v.EntityId) { eid = (long)v.EntityId; offs.Add(index); } index++; avs.Add((long)v.AttributeId); avs.Add((long)v.ValueId); }); //File.WriteAllText(Application.StartupPath + "\\objects_avs.json", JsonConvert.SerializeObject(avs)); //File.WriteAllText(Application.StartupPath + "\\objects_offs.json", JsonConvert.SerializeObject(offs)); CompressBytes(path + "\\objects_avs.json.gz", JsonConvert.SerializeObject(avs)); CompressBytes(path + "\\objects_offs.json.gz", JsonConvert.SerializeObject(offs)); } private static void CompressBytes(string filePath, string json) { FileStream fs = new FileStream(filePath, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); using (MemoryStream compressStream = new MemoryStream()) { var bytes = Encoding.UTF8.GetBytes(json); using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress)) zipStream.Write(bytes, 0, bytes.Length); bytes = compressStream.ToArray(); bw.Write(bytes); bw.Close(); fs.Close(); } }