티스토리 뷰
프로그램을 개발하다 보면 압축 상태의 자료를 읽거나, 아니면 자료를 압축 상태로 저장해야 하는 경우가 있다. 장기간 보관이나, 통신량 최소화, 보안 등의 필요와 연관되는 경우가 대부분이다. 이런 경우 외부 프로그램을 통해서 압축 및 압축 해제를 수행시키고 그 결과를 사용하는 방법도 있지만 프로그램의 융통성도 떨어지고 좀 더 효율성이 높은 프로그램을 제작하기에는 무리가 있다.
이런 경우 압축 라이브러리를 사용하면 프로그램의 융통성도 높이고 다양한 아이디어를 프로그램에 적용할 수 있다. 또한 .Net 전용 라이브러리를 사용하면 별도의 C/C++ 라이브러리를 사용하지 않아도 되므로 개발 및 배포 과정이 더 간편해진다. 비주얼 스튜디오에서 NuGet 도구를 활용하여 라이브러리를 설치할 수도 있겠으나 많은 경우 라이선스를 같이 배포해야 되는 등 약간의 제한들이 있는 경우가 대부분이었다. 그래서 .Net 전용 라이브러리이면서도 상용 프로그램에서도 사용할 수 있고 배포에 제약이 거의 없는 라이브러리를 찾아보았는데 위의 그림 같은 ZLIB.NET Free라는 패키지가 있었다. 이 회사에서 배포하고 있는 다른 라이브러리들도 배부분 이 라이브러리를 기반으로 하고 있는 것으로 보였다.
https://www.componentace.com/zlib_.NET.htm
위의 주소에 가서 다운로드하면 소스 코드 및 예제와 함께 라이브러리를 다운로드할 수 있고, 라이브러리만 받고 싶다면 아래의 첨부를 사용하면 된다.
상용 프로그램 및 소스 코드를 배포하지 않는 프로젝트에서 사용해도 무방하다. 상당히 개방적인 BSD 라이선스와 유사한 라이선스이다.
public static byte[] Compress(byte[] data, int datalen)
{
using (MemoryStream outMemoryStream = new MemoryStream())
using (zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outMemoryStream, zlib.zlibConst.Z_DEFAULT_COMPRESSION))
using (Stream inMemoryStream = new MemoryStream(data))
{
CopyStream(inMemoryStream, outZStream);
outZStream.finish();
return outMemoryStream.ToArray();
}
}
public static byte[] decbuf = null;
public static int Decompress(byte[] data, int decbuf_len)
{
using (MemoryStream outMemoryStream = new MemoryStream())
using (zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outMemoryStream))
using (Stream inMemoryStream = new MemoryStream(data))
{
CopyStream(inMemoryStream, outZStream);
outZStream.finish();
decbuf = outMemoryStream.ToArray();
return decbuf.Length;
}
}
.......................
// 압축
byte[] zipdata = Compress(text_buf, text_pt);
txtf[fidx].Seek(ztext_pt, SeekOrigin.Begin);
txtf[fidx].Write(zipdata, 0, zipdata.Length);
.......................
//압축 해제
byte[] org = File.ReadAllBytes(jfbfilename);
int orglen = Decompress(org, org_length);
.......................
위의 코드는 특정 문자열 버퍼를 압축해서 파일에 저장하는 예제와 압축 파일을 읽어 압축 해제하는 예제이다.
'프로그래밍' 카테고리의 다른 글
C# 배포시 난독화를 해야 할까? - ConfuserEx 사용법 (11) | 2020.05.05 |
---|---|
C# 스트롤바 컨트롤 사용하기 (0) | 2020.05.02 |
C# 32비트와 64비트를 모두 지원하는 SQLite 응용 프로그램 개발하기 (0) | 2020.04.30 |
C# ColorDialog 대체하기, 웹 전용 색상 선택하기 (0) | 2020.04.29 |
C# 자주쓰는 타입 변환 - byte, string, int (0) | 2020.02.19 |
- TAG
- .NET 전용 라이브러리, zlib, zlib.net, ZLIB.NET Free, 압축 라이브러리
- 런타임 에러 76은 경로를 찾을수 없다는 메시지 이군요. 입력하신 경로를⋯
- Set folder = fso.GetFolder(sFolder) 에서 런⋯
- [승인대기]
- 표준 시간은 제주 올레 홈페이지를 참조하시는 것이 좋을듯 하네요. 이 포⋯
- 안녕하세요. 리뷰 감사해요 소요시간이 어떻게 되나요? 저도 가보려고요
- 제주 올레길 / 까미노 데 산티아고 길 을 가봤는데 아직 해파랑 남파⋯
- 아 오르세... 제 가 갔을땐 실내 촬영이 안됬는데 지금은 된다고 하지요⋯
- 법환 포구 빌라 자리엔 원래 각종 맛집들이 있엇는데 말이죠.. 싹 밀어서⋯
- 리눅스의 쉘 환경과 같은 준비를 해주는 것으로 이해하면 좋을듯 합니다. ⋯
- 안녕하세요.. 야라바님 초면에 갑작스럽겠지만 제 생명의 은인입니다. T⋯