티스토리 뷰

내 질문에 답하기 위해 실제로는 그 반대입니다.

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.GZipStreamPowerShell 압축에 사용할 수 inflateInit2()있고 압축 해제에 사용할 수 있으며 모두 괜찮을 것입니다 (@Mark Adler의 제안 덕분에).



출처
https://stackoverflow.com/questions/39940087
댓글
공지사항
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30