티스토리 뷰
내 질문에 답하기 위해 실제로는 그 반대입니다.
System.IO.Compression.DeflateStream
추가 데이터를 추가하지 않고 헤더 / 메타 데이터없이 원시 deflate 스트림을 출력합니다.
실제로 스트림에 ZLib 헤더를 추가해야했습니다. RFC 1950을 참조하십시오 .
이 답변은 또한 저에게 도움이되었습니다.
zlib 헤더는 어떻게 생겼습니까?
구체적으로 zlib 헤더에는 2 바이트가 있어야합니다.
0 1
+---+---+
|CMF|FLG|
+---+---+
첫 번째 바이트 (CMF) :
첫 번째 바이트의 각 니블 (반 바이트)에는 다음과 같은 의미가 있습니다.
bits 0 to 3 CM Compression method
bits 4 to 7 CINFO Compression info
위에서 언급 한 답변에서 더 자세히 볼 수 있습니다.
두 번째 바이트 (FLG) :
FLG (FLaGs)이 플래그 바이트는 다음과 같이 나뉩니다.
bits 0 to 4 FCHECK (check bits for CMF and FLG)
bit 5 FDICT (preset dictionary)
bits 6 to 7 FLEVEL (compression level)
가장 일반적인 헤더는 다음과 같습니다.
78 01 - No Compression/low
78 9C - Default Compression
78 DA - Best Compression
의 출력 78 9C
앞에 헤더 를 추가 System.IO.Compression.DeflateStream
했지만 @Mark Adler가 주석에서 말한대로 한 단계 더 있습니다. 스트림 끝에 Adler-32 체크섬을 추가해야합니다.
편집하다:
결국 저는 바퀴를 재발 명하려고했습니다. System.IO.Compression.GZipStream
PowerShell 압축에 사용할 수 inflateInit2()
있고 압축 해제에 사용할 수 있으며 모두 괜찮을 것입니다 (@Mark Adler의 제안 덕분에).
출처
https://stackoverflow.com/questions/39940087