2017-12-28 3 views
0

현재 하나의 Node.js 프로젝트에서 작업 중입니다. ZIP 파일을 FS에 저장하지 않고 (수정 한 후에 TCP로 수신하고 다시 보내면) ZIP 파일을 읽고 수정하고 쓸 수있는 기능을 원합니다. 그리고 지금까지는 간단한 ZIP 파일 구조의 가능한 일시적인 것으로 보입니다. 현재 나는 this documentation을 참조합니다.ZIP 파일 형식입니다. 파일을 올바르게 읽는 방법?

그래서 ZIP 파일은 간단한 구조를 가지고 우리가 필드 compressed size을 포함 파일 헤더를 읽을 필요가

File header 1 
File data 1 
File data descriptor 1 

File header 2 
File data 2 
File data descriptor 2 

... 

[other not important yet] 

먼저, 그리고 그것의 길이에 의해 file data 1을 읽을 수있는 완벽한 방법이 될 수 있습니다. 그러나 실제로는 그렇지 않습니다. 이 필드에는 '0'또는 '0xFFFFFFFF'가 포함될 수 있으며 그 값은 실제 길이를 설명하지 않습니다. 이 경우 길이에 대한 정보없이 파일 데이터를 읽어야합니다. 그러나 어떻게 ..?

압축/해독 알고리즘에 대한 설명은 나에게 매우 복잡해 보이며 어쨌든 압축 자체에 ZLIB를 사용할 계획입니다. 유용한 정보가 거기에 설명되어 있다면, 나는 그 요점을 놓쳤다.

누군가 해당 파일을 읽을 수있는 적절한 방법을 설명 할 수 있습니까?

P. npm 모듈을 제안하지 마십시오. 나는 문제를 해결하는 것뿐만 아니라, 어떻게 일을하는지 이해하기를 원한다.

답변

0

주 - 난 당신이 읽고 오히려 처리하기 전에 메모리에 전체 zip 파일을 읽는 것보다, 소켓 벗기 로 zip 파일을 처리 할 있으리라 믿고있어. 두 옵션 모두 유효합니다.

나는 처음 compressed size가 '0'또는 '을 0xFFFFFFFF'의 값을 갖는 사용 사례를 무시하는 것입니다. 전자는 스트리밍 모드로 생성 된 zip 파일에만 존재하며, 후자는 4Gig보다 큰 zip 파일에 대해서만 존재합니다.

이러한 항목을 처리하면 많은 복잡성이 추가됩니다. 필요한 경우 나중에 지원을 추가 할 수 있습니다. 0/0xFFFFFFFF 사용 사례를 지원해야하는지 여부는 처리하려는 zip 파일의 특성에 따라 다릅니다.

compression methoddeflated (8)이면 압축/압축 해제에 zlib을 사용하십시오. compression methodstored (0)도 지원해야합니다. 압축이 적절하지 않은 아주 작은 파일에 사용됩니다.

관련 문제