2009-09-11 8 views
2

네트워크를 통해 보내려는 텍스트 파일이 있는데이 파일의 크기는 1KB에서 500KB까지 다양합니다.
파일을 보내기 전에 단단히 압축하여 네트워크를 통해 전송되는 바이트 수가 가장 적고 압축률이 높을 수있는 알고리즘/기법은 무엇입니까?높은 압축률의 네트워크를 통해 텍스트 파일 보내기

+0

당신은 압축하는 동안 스트림 압축을 원하십니까? 아니면 압축하고, 보내고, 수신하고, 압축을 풀고, 처리 할 시간이 걸립니까? –

답변

6

, 나는 (이 목록은 완전하지 않은 그러나 이러한 IMO 가장 유명한) gzip을, 레스 햇의 bzip2와 LZMA를 생각 하는데요.

그런 다음 인터넷에서 일부 벤치 마크를 찾아 다양한 파일 형식 (텍스트, 이진, 혼합) 및 크기 (작음, 큰, 거대)에 대한 메트릭을 수집하려고합니다. 대부분 압축 비율에 관심이 있더라도 압축 비율, 압축 시간, 메모리 사용 공간, 압축 해제 시간을 볼 수 있습니다. A Quick Benchmark: Gzip vs. Bzip2 vs. LZMA 따르면

:

[...] GZIP가 매우 빠르고, 작은 메모리 풋 프린트를 갖는다. 이 벤치 마크에 따르면 bzip2와 lzma는 속도 나 메모리 사용면에서 gzip과 경쟁 할 수 없습니다. bzip2는 gzip보다 압축률이 월등히 뛰어나므로 bzip2의 인기가 높아야합니다. 특히 감압에서 gzip보다 느리고 더 많은 메모리를 사용합니다. 그러나 bzip2의 메모리 요구 사항은 요즘에는 오래된 하드웨어에서도 문제가되지 않습니다.

[...]

LZMA 명확 유닉스 용 시스템에서 일반적으로 사용되는 세번째 일반 purporse 압축 형식이 될 가능성이있다. gzip에 비해 상대적으로 압축 해제 속도를 유지하면서 압축률이 현저하게 향상되어 bzip2와 경쟁합니다.

LZMA - better than bzip2에서 확인된다 GZIP 이 38 %를 달성 할 때의 bzip2 34 가장 압축 레벨 (

  • 향상된 압축비 :

    설명은 에서 짧은 인상적 %, LZMA는 25 %).

  • 압축 비율은에 주로 이 표시됩니다.
  • 압축 해제 시간이 bzip2보다 훨씬 빠릅니다 (3-4 회).
  • 알고리즘을 병렬로 실행할 수 있습니다 (단, 여기에서 설명 할 도구 은 하나의 스레드입니다).

    • 압축 (낮은 수준 제외)의 bzip2보다 훨씬 느립니다 :

    는 단점도있다.

  • 압축시 메모리 요구 사항이 bzip2보다 훨씬 큽니다.

그래서, 텍스트 파일, 같은 사이트 보고서의 압축 : I가 LZMA를 사용

우선 내 메일 아카이브를 압축 했다. 내가 선택한 파일 (mbox 형식의 메일)은 크기가 528MB이며 최대 압축 비율은 입니다. 압축 도중 lzma 프로세스는 370MB가 크고, 그것은 입니다. :) bzip2는 7MB 미만이었습니다. 을 lzma로 압축하는 데 약 15 분이 걸렸으며 4 분 미만인 bzip2로 압축하는 데 걸렸습니다. 압축 배급은 매우 유사 : 출력 파일은 bzip2의 경우 373MB이고 lzma의 경우 370MB입니다. 감압 시간은 lzma 의 경우 1m12s이고 bzip2의 경우 1m48s입니다. Compression Tools: lzma, bzip2 & gzip

정말 자신의 벤치를 수행하는 것이 좋습니다 것입니다 (텍스트를 압축 할 수 있습니다로하는 것은 단지 작은 파일에 아주 작은) 실제 얻을 :

마지막으로, 여기에 그래픽 결과와 다른 자원이다 메트릭을 귀하의 환경에서하지만 내 내기를 LZMA 작은 텍스트 파일에 상당한 이점을 제공하지 것입니다 그래서 괜찮은 선택이 될 경우에도 (시간 및 메모리 오버 헤드가 LZMA 작은 파일에 낮은 수 있습니다).

자바에서 압축을 수행하려는 경우, 당신은 LZMA 구현 here (아파치 개미 AFAIK에서 오는)는 bzip2의 구현 here, gzip를 찾을 수는 JDK에 포함된다. 타사 라이브러리를 사용하고 싶지 않거나 신뢰할 수 없으면 gzip을 사용하십시오.

4

답변 내용은 내용에 따라 다릅니다. GZip은 jdk에 포함되어 있습니다. 임의의 문자열에 대한 테스트는 평균 33 %의 크기 감소를 나타냅니다.

[편집 : 내용이 아닌 컨텍스트] 압축

+0

GZIP 브라우저가 종속적입니까? 여기서는 원격 서블릿과 대화하는 자체 자바 클라이언트 만 브라우저를 사용하지 않습니다. –

+3

Java에 기능이 내장되어 있습니다 (Jar 파일 때문에). 항상 사용할 수 있어야합니다. –

+1

표준 기능입니다. http://java.sun.com/javase/6/docs/api/java/util/zip/package-summary.html을 참조하십시오. – alphazero

0

에 달려 있습니다. 네트워크 패킷 크기를 제어 할 수 있습니까? 1 개 이상이 패킷에 들어 맞으면 묶으시겠습니까? 양쪽 끝에서 CPU에 의해 제한됩니까? 실제로 질문은 아니지만 바이트와 시간을 압축하는 데 압축 시간이 더 걸릴 수 있으므로 & 압축을 해제해야합니다.

관련 문제