C#壓縮和解壓縮字節(GZip的使用)、壓縮字節流寫入壓縮文件中


作用:此類在 .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();
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM