using System.IO;
using System.IO.Compression;
#if NETSTANDARD2_0
using Brotli;
#endif
namespace ToolGood.Bedrock
{
///
/// 压缩
///
public static class CompressionUtil
{
///
/// 默认压缩
///
/// 要压缩的字节数组
/// 快速模式
/// 压缩后的数组
public static byte[] DeflateCompress(byte[] data, bool fastest = false)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream()) {
var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal;
using (DeflateStream zStream = new DeflateStream(stream, level)) {
zStream.Write(data, 0, data.Length);
}
return stream.ToArray();
}
} catch {
return data;
}
}
///
/// 解压
///
/// 要解压的字节数组
/// 解压后的数组
public static byte[] DeflateDecompression(byte[] data)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream(data)) {
using (DeflateStream zStream = new DeflateStream(stream, CompressionMode.Decompress)) {
using (var resultStream = new MemoryStream()) {
zStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
} catch {
return data;
}
}
///
/// Gzip压缩
///
/// 要压缩的字节数组
/// 快速模式
/// 压缩后的数组
public static byte[] GzipCompress(byte[] data, bool fastest = false)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream()) {
var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal;
using (GZipStream zStream = new GZipStream(stream, level)) {
zStream.Write(data, 0, data.Length);
}
return stream.ToArray();
}
} catch {
return data;
}
}
///
/// Gzip解压
///
/// 要解压的字节数组
/// 解压后的数组
public static byte[] GzipDecompress(byte[] data)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream(data)) {
using (GZipStream zStream = new GZipStream(stream, CompressionMode.Decompress)) {
using (var resultStream = new MemoryStream()) {
zStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
} catch {
return data;
}
}
///
/// Br压缩
///
/// 要压缩的字节数组
/// 快速模式
/// 压缩后的数组
public static byte[] BrCompress(byte[] data, bool fastest = false)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream()) {
var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal;
using (BrotliStream zStream = new BrotliStream(stream, level)) {
zStream.Write(data, 0, data.Length);
}
return stream.ToArray();
}
} catch {
return data;
}
}
///
/// Br解压
///
/// 要解压的字节数组
/// 解压后的数组
public static byte[] BrDecompress(byte[] data)
{
if (data == null || data.Length == 0)
return data;
try {
using (MemoryStream stream = new MemoryStream(data)) {
using (BrotliStream zStream = new BrotliStream(stream, CompressionMode.Decompress)) {
using (var resultStream = new MemoryStream()) {
zStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
} catch {
return data;
}
}
}
}