2013-06-11 1 views
0

zlib로 atm 압축해야하는 파일의 압축을 풀 때 문제가 있습니다. 파일은이 문서에서 인 icecache 파일zlib로 알 수없는 압축 방법

입니다 : Zlib compression Using Deflate and Inflate classes in Java

내가 주요 방법을 throwed과 자바로 코드를 추가 : I에 유래의 코드를 사용

Cache files are created on a per object and per frame basis. Each file is a zip archive, utilizing the ZLIB library to save and load directly using a zip-stream. located at: http://softimage.wiki.softimage.com/index.php?title=Icecache_File_Format

처리 할 파일 (java dialect).

void setup() { 
    File compressed = new File(sketchPath+"/pc_oj_simple_AnimTake1_11.icecache"); 
    println(compressed.exists()); 

    try { 
    ZlibCompression.decompressFile(compressed, new File(sketchPath+"/pc_oj_simple_AnimTake1_11.icecacheDecomp")); 
    } 
    catch (IOException e) { 
    println(e); 
    } 
} 

나는 다음과 같은 오류 얻을 그래서 내가 가진 : java.util.zip.ZipException : 알 수없는 압축 방법 여기

는 파일입니다 https://dl.dropboxusercontent.com/u/17630770/temp/pc_oj_simple_AnimTake1_11.icecache.zip

나는 압축 끄트머리 txt 파일을 압축 해제하고 다시 압축을 풀면 정상적으로 작동합니다.

어떻게 계속 잘못 될지 알아볼 수 있습니까?

+0

압축을 풀려고하는 파일이 작성된 컴퓨터 아키텍처의 바이트 순서는 무엇이며 프로그램을 실행하려고하는 컴퓨터 아키텍처의 바이트 순서는 무엇입니까? – statueuphemism

+0

파일은 Windows에서 제공되며 아마도 64 비트이지만 확실하지는 않습니다. 나는 맥 64 비트에서 압축을 풀려고합니다. – clankill3r

+0

죄송합니다. 리틀 엔디안 대 빅 엔디안 정보를 요구했습니다. 리틀 엔디안 바이트 순서를 사용하는 시스템에서 AMD 또는 인텔 칩이 될 가능성이 있으므로 바이트 순서가 문제가 아닐 수 있습니다. – statueuphemism

답변

0

zip 파일이라고했지만 zip 파일에 대한 링크를 제공한다고해도 데이터는 zip 파일이 아닌 것으로 보입니다. 내가 제공 한 것을 압축 해제하면 gzip 스트림이 발생합니다. 코드가 zlib 스트림을 다른 형식으로 압축을 풀 것입니다.

연결된 zip 파일에있는 icecache 파일을 읽으려면 GZIPInputStream을 사용해야합니다. 또는 zlib를 직접 사용하는 경우 zlib의 gz* 기능을 사용하십시오.

icecache 형식에 대한 참조는 어떤 형식인지에 대해 몹시 혼란스러워합니다. "각 파일은 zip 아카이브입니다."라고 말하지만 "ZLIB 라이브러리를 활용하여 zip 스트림을 사용하여 직접 저장하고로드합니다"라고 말합니다. 와, 좋아. 먼저, zlib은 zip 파일을 직접 생성하거나 읽지 않습니다. zlib은 압축 된 압축 데이터 형식에 대해 압축 및 압축 해제 서비스를 제공합니다.이 압축 형식은 일 수 있으며 zip 파일 형식을 처리하는 소프트웨어에서 사용할 수 있습니다. 그러나 zlib은 코드를 제공하여 zip 파일 형식을 처리합니다 (소스 배포판의 contrib/디렉토리에있는 제 3 자 배포 물 제외). 이 줄을 따라 zlib에는 "zip-stream"같은 것이 없습니다.

그래서 무엇입니까? 형식이 실제로 zip이고 zlib를 단독으로 사용할 수 없습니까? 또는 zlib이 처리하는 형식이고 zip이 아닌 형식입니까? 다행스럽게도 아래쪽에 예제 소스 코드가 있으며 icecache.rar 파일 아래에 링크되어 있습니다. 파이썬 소스 코드는 gzip을 쓰는 형식으로 사용합니다. zlib은 사실 gzip 형식을 지원합니다 (이것은 zip 형식과 완전히 다릅니다).

이 결론은 압축 해제시 gzip 스트림을 포함하는 제공된 예제 파일에 의해 보강됩니다. 압축을 풀 때 gzip 스트림은 "ICECACHE"로 시작합니다.

zlib의 gz* 기능은 문서화 된 icecache 데이터 레이아웃이 포함 된 gzip 스트림을 읽고 쓰는 데 사용해야합니다.

+0

그가 원하는 것은 ZipFile 클래스입니까? Dropbox에 파일을 저장하기 전에 파일을 압축하지 않았다고 확신합니까? 압축 된 파일을 압축하는 것은 다소 중복 될 수 있지만'File compressed = new File (sketchPath + "/ pc_oj_simple_AnimTake1_11.icecache"); ' – statueuphemism

+0

'라인의 파일 확장자에 대한 참조가 없습니다. 나는 압축을 푼 파일을 보았고 그 자체가 _gzip_ 스트림입니다. –

+0

파일 확장자는 .icecache 공식 참조에 따르면 zlib 여야합니다. 파일을 보낸 사람이 모든 파일을 압축했습니다. 그래서 그의 지퍼가 zlib를 깨뜨릴 수 있습니까? – clankill3r

관련 문제