728x90
728x170
▶ Program.cs
using System;
using System.Text;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < 1000; i++)
{
stringBuilder.AppendLine("abcdefghijklmnopqrstuvwxyz");
}
string source = stringBuilder.ToString();
Console.WriteLine("소스 문자열 : " + source.Length.ToString());
string target = StringCompressionHelper.Compress(stringBuilder.ToString());
Console.WriteLine("압축 문자열 : " + target.Length.ToString());
string restore = StringCompressionHelper.Decompress(target);
Console.WriteLine("복원 문자열 : " + restore.Length.ToString());
}
#endregion
}
}
728x90
▶ StringCompressionHelper.cs
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
namespace TestProject
{
/// <summary>
/// 문자열 압축 헬퍼
/// </summary>
public static class StringCompressionHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 압축하기 - Compress(source)
/// <summary>
/// 압축하기
/// </summary>
/// <param name="source">소스 문자열</param>
/// <returns>압축 문자열</returns>
public static string Compress(string source)
{
byte[] sourceArray = Encoding.UTF8.GetBytes(source);
MemoryStream memoryStream = new MemoryStream();
using(GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
{
gZipStream.Write(sourceArray, 0, sourceArray.Length);
}
memoryStream.Position = 0;
byte[] temporaryArray = new byte[memoryStream.Length];
memoryStream.Read(temporaryArray, 0, temporaryArray.Length);
byte[] targetArray = new byte[temporaryArray.Length + 4];
Buffer.BlockCopy(temporaryArray, 0, targetArray, 4, temporaryArray.Length);
Buffer.BlockCopy(BitConverter.GetBytes(sourceArray.Length), 0, targetArray, 0, 4);
return Convert.ToBase64String(targetArray);
}
#endregion
#region 압축 해제하기 - Decompress(source)
/// <summary>
/// 압축 해제하기
/// </summary>
/// <param name="source">소스 문자열</param>
/// <returns>압축 해제 문자열</returns>
public static string Decompress(string source)
{
byte[] sourceArray = Convert.FromBase64String(source);
using(MemoryStream memoryStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(sourceArray, 0);
memoryStream.Write(sourceArray, 4, sourceArray.Length - 4);
byte[] targetArray = new byte[dataLength];
memoryStream.Position = 0;
using(GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
{
gZipStream.Read(targetArray, 0, targetArray.Length);
}
return Encoding.UTF8.GetString(targetArray);
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 네트워크 스캐너 사용하기 (0) | 2018.06.10 |
---|---|
[C#/COMMON] 포트 스캔하기 (0) | 2018.06.09 |
[C#/COMMON] 명명 파이프(Named Pipe) 사용하기 (0) | 2018.06.07 |
[C#/COMMON] API를 사용해 명명 파이프(Named Pipe) 사용하기 (0) | 2018.06.06 |
[C#/COMMON] NewtonSoft JSON DLL 버전 충돌 해결하기 (0) | 2018.06.04 |
[C#/COMMON] 웹 브라우저에서 프록시 서버 사용하기 (0) | 2018.05.12 |
[C#/COMMON] PerformanceCounter 클래스 사용하기 (0) | 2018.05.09 |
[C#/COMMON] 거리 구하기 (0) | 2018.05.09 |
[C#/COMMON] 너비 우선 탐색을 사용해 최단 경로 구하기 (0) | 2018.04.28 |
[C#/COMMON] 너비 우선 탐색하기 (Breadth-First Search) (0) | 2018.04.28 |