| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using UnityEngine;
- using System;
- using System.IO;
- using System.Text;
- using ICSharpCode.SharpZipLib.GZip;
- using ICSharpCode.SharpZipLib.Zip;
- using ICSharpCode.SharpZipLib.BZip2;
- /// <summary>
- /// 压缩方式。
- /// </summary>
- public enum CompressionType
- {
- /// <summary>
- /// GZip 压缩格式
- /// </summary>
- GZip,
- /// <summary>
- /// BZip2 压缩格式
- /// </summary>
- BZip2,
- /// <summary>
- /// Zip 压缩格式
- /// </summary>
- Zip
- }
- public static class CompressionUtil
- {
- public static CompressionType CompressionProvider = CompressionType.GZip;
- public static byte[] Compress(byte[] bytesToCompress)
- {
- MemoryStream ms = new MemoryStream();
- Stream s = OutputStream(ms);
- s.Write(bytesToCompress, 0, bytesToCompress.Length);
- s.Close();
- return ms.ToArray();
- }
- public static string Compress(string stringToCompress)
- {
- byte[] compressedData = CompressToByte(stringToCompress);
- string strOut = Convert.ToBase64String(compressedData);
- return strOut;
- }
- public static byte[] CompressToByte(string stringToCompress)
- {
- byte[] bytData = Encoding.Unicode.GetBytes(stringToCompress);
- return Compress(bytData);
- }
- public static string UnCompress(string stringToDecompress)
- {
- string outString = string.Empty;
- if (stringToDecompress == null)
- {
- throw new ArgumentNullException("stringToDecompress", "You tried to use an empty string");
- }
- try
- {
- byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
- outString = Encoding.Unicode.GetString(UnCompress(inArr));
- }
- catch (NullReferenceException nEx)
- {
- return nEx.Message;
- }
- return outString;
- }
- public static byte[] UnCompress(byte[] bytesToDecompress)
- {
- byte[] writeData = new byte[4096];
- Stream s2 = InputStream(new MemoryStream(bytesToDecompress));
- MemoryStream outStream = new MemoryStream();
- while (true)
- {
- int size = s2.Read(writeData, 0, writeData.Length);
- if (size > 0)
- {
- outStream.Write(writeData, 0, size);
- }
- else
- {
- break;
- }
- }
- s2.Close();
- byte[] outArr = outStream.ToArray();
- outStream.Close();
- return outArr;
- }
- private static Stream OutputStream(Stream inputStream)
- {
- switch (CompressionProvider)
- {
- case CompressionType.BZip2:
- return new BZip2OutputStream(inputStream);
- case CompressionType.GZip:
- return new GZipOutputStream(inputStream);
- case CompressionType.Zip:
- return new ZipOutputStream(inputStream);
- default:
- return new GZipOutputStream(inputStream);
- }
- }
- private static Stream InputStream(Stream inputStream)
- {
- switch (CompressionProvider)
- {
- case CompressionType.BZip2:
- return new BZip2InputStream(inputStream);
- case CompressionType.GZip:
- return new GZipInputStream(inputStream);
- case CompressionType.Zip:
- return new ZipInputStream(inputStream);
- default:
- return new GZipInputStream(inputStream);
- }
- }
- }
|