첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170
using System;
using System.IO;

using ICSharpCode.SharpZipLib.Zip;

#region 바이트 배열 압축하기 - Compress(sourceByteArray)

/// <summary>
/// 바이트 배열 압축하기
/// </summary>
/// <param name="sourceByteArray">소스 바이트 배열</param>
/// <returns>타겟 바이트 배열</returns>
public byte[] CompressByteArray(byte[] sourceByteArray)
{
    string guid = Guid.NewGuid().ToString();

    MemoryStream targetMemoryStream = new MemoryStream();

    ZipOutputStream zipOutputStream = new ZipOutputStream(targetMemoryStream);

    zipOutputStream.SetLevel(9);

    zipOutputStream.SetComment(guid);

    using(MemoryStream sourceMemoryStream = new MemoryStream(sourceByteArray))
    {
        zipOutputStream.PutNextEntry(new ZipEntry(guid));

        byte[] bufferByteArray = new byte[2048];

        while(true)
        {
            int readCount = sourceMemoryStream.Read(bufferByteArray, 0, bufferByteArray.Length);

            if(readCount == 0)
            {
                break;
            }

            zipOutputStream.Write(bufferByteArray, 0, readCount);
        }

        zipOutputStream.CloseEntry();
    }

    byte[] targetByteArray = targetMemoryStream.ToArray();

    zipOutputStream.Finish();

    zipOutputStream.Close();

    return targetByteArray;
}

#endregion

#region 바이트 배열 압축 해제하기 - DecompressByteArray(sourceByteArray)

/// <summary>
/// 바이트 배열 압축 해제하기
/// </summary>
/// <param name="sourceByteArray">소스 바이트 배열</param>
/// <returns>타겟 바이트 배열</returns>
public static byte[] DecompressByteArray(byte[] sourceByteArray)
{
    MemoryStream sourceMemoryStream = new MemoryStream(sourceByteArray);

    ZipInputStream zipInputStream = new ZipInputStream(sourceMemoryStream);

    byte[] bufferByteArray = new byte[2048];
    byte[] targetByteArray = null;

    ZipEntry zipEntry = zipInputStream.GetNextEntry();

    if(zipEntry == null)
    {
        return targetByteArray;
    }

    using(MemoryStream targetMemoryStream = new MemoryStream())
    {
        while(true)
        {
            int readCount = zipInputStream.Read(bufferByteArray, 0, 2048);

            if(readCount == 0)
            {
                break;
            }

            targetMemoryStream.Write(bufferByteArray, 0, readCount);
        }

        targetByteArray = targetMemoryStream.ToArray();
    }

    zipInputStream.Close();

    return targetByteArray;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요