You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.3 KiB
113 lines
3.3 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace NFine.Code
|
|
{
|
|
public class GZip
|
|
{
|
|
/// <summary>
|
|
/// 压缩
|
|
/// </summary>
|
|
/// <param name="text">文本</param>
|
|
public static string Compress(string text)
|
|
{
|
|
if (text.IsEmpty())
|
|
return string.Empty;
|
|
byte[] buffer = Encoding.UTF8.GetBytes(text);
|
|
return Convert.ToBase64String(Compress(buffer));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解压缩
|
|
/// </summary>
|
|
/// <param name="text">文本</param>
|
|
public static string Decompress(string text)
|
|
{
|
|
if (text.IsEmpty())
|
|
return string.Empty;
|
|
byte[] buffer = Convert.FromBase64String(text);
|
|
using (var ms = new MemoryStream(buffer))
|
|
{
|
|
using (var zip = new GZipStream(ms, CompressionMode.Decompress))
|
|
{
|
|
using (var reader = new StreamReader(zip))
|
|
{
|
|
return reader.ReadToEnd();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 压缩
|
|
/// </summary>
|
|
/// <param name="buffer">字节流</param>
|
|
public static byte[] Compress(byte[] buffer)
|
|
{
|
|
if (buffer == null)
|
|
return null;
|
|
using (var ms = new MemoryStream())
|
|
{
|
|
using (var zip = new GZipStream(ms, CompressionMode.Compress, true))
|
|
{
|
|
zip.Write(buffer, 0, buffer.Length);
|
|
}
|
|
return ms.ToArray();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解压缩
|
|
/// </summary>
|
|
/// <param name="buffer">字节流</param>
|
|
public static byte[] Decompress(byte[] buffer)
|
|
{
|
|
if (buffer == null)
|
|
return null;
|
|
return Decompress(new MemoryStream(buffer));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 压缩
|
|
/// </summary>
|
|
/// <param name="stream">流</param>
|
|
public static byte[] Compress(Stream stream)
|
|
{
|
|
if (stream == null || stream.Length == 0)
|
|
return null;
|
|
return Compress(StreamToBytes(stream));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解压缩
|
|
/// </summary>
|
|
/// <param name="stream">流</param>
|
|
public static byte[] Decompress(Stream stream)
|
|
{
|
|
if (stream == null || stream.Length == 0)
|
|
return null;
|
|
using (var zip = new GZipStream(stream, CompressionMode.Decompress))
|
|
{
|
|
using (var reader = new StreamReader(zip))
|
|
{
|
|
return Encoding.UTF8.GetBytes(reader.ReadToEnd());
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 流转换为字节流
|
|
/// </summary>
|
|
/// <param name="stream">流</param>
|
|
public static byte[] StreamToBytes(Stream stream)
|
|
{
|
|
stream.Seek(0, SeekOrigin.Begin);
|
|
var buffer = new byte[stream.Length];
|
|
stream.Read(buffer, 0, buffer.Length);
|
|
return buffer;
|
|
}
|
|
}
|
|
}
|