2012-06-05 3 views
-1

현재 사용자가 파일을 압축하고 압축을 풀 수있는 Java/Android 응용 프로그램을 개발 중입니다. 처음에는 같은 파일 크기를 연구하기 시작 :이 연구 한 후파일을 압축 및 압축 해제하는 응용 프로그램/시스템 구축 위치

1Byte = 8Bits 
1KB = 1024Byte 
1MB = 1024KB 
1GB = 1024MB 
1TB = 1024GB 
1PB = 1024TB 
1EB = 1024PB 
1ZB = 1024EB 
1YB = 1024ZB 

, 내가 공부하고 그물에 몇 가지 기사를 읽고 파일 압축 (나는 '경우 정정 해줘의 2 종류가 있습니다 발견 m wrong) : 무손실과 손실. 무손실 압축은 하나의 파일을 잃지 않고 파일을 더 작은 비트로 압축하는 것을 의미하며 손실 압축은 파일을 압축하는 동안 중요한 파일이 제거되었음을 의미합니다.

나는 또한 압축 (실행 길이 코딩 방법)을 읽는는 다음과 같이이다 : 이것에

AAABBCCDFFFFEEEEH 

: 나에게 파일에 작품을 압축 해제/압축 방법에 대한 아이디어를 제공

3A2B2CD4F4EH 

.

나는 또한 내가 아니라 압축 및 각종 유용한 웹 사이트/포럼에서 파일을 압축 해제에 대한 몇 가지 코드를 시도

java.util.zip 

입니다 (안드로이드에 적용 가능) 자바에 파일을 압축하기위한 API가 있다는 것을 인터넷을 검색/etc (stackoverflow.com 포함)이 저에게이 연구에 대한 경험을 제공합니다.

또한 (나는 또한 '돈

Huffman encoding algorithm - assigns a code to characters in a file based on how frequently those characters occur 

run-length encoding - generates a two-part value for repeated characters: the first part specifies the number of times the character is repeated, and the second part identifies the character 

Lempel-Ziv algorithm - converts variable-length strings into fixed-length codes that consume less space than the original strings. 

지금, 내가 압축 java.util.zip을 사용하여 파일을 압축 해제에 너 한테을 코딩하는 방법을 알 필요가있는 데이터 압축에 사용되는 알고리즘에 대해 읽어 그것을 사용하는 방법을 안다. 그물에 관한 튜토리얼은 나를 위해 일하지 않는다 : /). winzip, winrar, 압축 폴더 (windows), androzip (android app)이 사용하는 algo는 무엇입니까? 다른 사람이 java.util.zip의 작동 방식과 알고리즘에 대해 단계별로 가르쳐 주시겠습니까 (학교 교육을받지 않은 사람으로 저를 대우하십시오)? 긴 지위 사람들을 유감스럽게 생각합니다. 향후 도움과 게시물을 보내 주셔서 감사합니다 (있을 경우)!

+0

질문에 답변이 너무 광범위 할 수 있습니다. 어떤 경우에도 java.util.zip을 사용하려면 http://www.mkyong.com/java/how-to-compress-files-in-zip-format/ – cklab

+0

을 참조하십시오. 튜토리얼을 따라갈 수없는 경우, 여기에 적힌 글을 쉽게 따라 할 수 있다고 생각하는 이유는 무엇입니까? 당신은 어려움을 겪고있는 것을 지정해야합니다. 그렇지 않으면 아무도 당신을 도울 수 없게됩니다. –

+0

cklab, 귀하의 제안에 감사드립니다! 나는 이것을 나의 공부 목록에 포함시킬 것이다. – John

답변

0
public static final byte[] unzip(byte[] in) throws IOException { 
// decompress using GZIPInputStream 
ByteArrayOutputStream outStream = 
    new ByteArrayOutputStream(EXPECTED_COMPRESSION_RATIO * in.length); 

GZIPInputStream inStream = 
    new GZIPInputStream (new ByteArrayInputStream(in)); 

byte[] buf = new byte[BUF_SIZE]; 
while (true) { 
    int size = inStream.read(buf); 
    if (size <= 0) 
    break; 
    outStream.write(buf, 0, size); 
} 
outStream.close(); 

return outStream.toByteArray(); 
} 


public static final byte[] zip(byte[] in) { 
try { 
    // compress using GZIPOutputStream 
    ByteArrayOutputStream byteOut= 
    new ByteArrayOutputStream(in.length/EXPECTED_COMPRESSION_RATIO); 

    GZIPOutputStream outStream= new GZIPOutputStream(byteOut); 

    try { 
    outStream.write(in); 
    } catch (Exception e) { 
    LOG.error("", e); 
    } 

    try { 
    outStream.close(); 
    } catch (IOException e) { 
     LOG.error("", e); 
    } 

    return byteOut.toByteArray(); 

} catch (IOException e) { 
    LOG.error("", e); 
    return null; 
} 
} 
+0

그럼 도움이된다면? 그 사람은 단계별 해결책을 원합니다. – rekire

+0

게시물을 보내 주셔서 감사합니다! 어쩌면 나는 이것을 나중에 참조 할 때 사용할 수있을 것이다. 또한 내 문제 rekire 이해 주셔서 감사합니다 :) – John