Golang과 Python Zlib 출력의 차이점 이해
Zlib 압축을 사용하여 문자열을 압축할 때 Python의 zlib 라이브러리는 다음과 비교하여 다른 출력을 생성합니다. Golang의 zlib 구현. 구체적으로 다섯 번째 바이트는 다릅니다. Python의 값은 0이고 Golang의 값은 4입니다.
차이의 원인
출력의 차이는 Python 및 Go 라이브러리에서 사용되는 다양한 플러시 메커니즘에서. Python의 zlib의 기본값은 Z_FLUSH로, 이는 각 데이터 블록을 압축한 후 버퍼를 플러시합니다. 대조적으로 Zlib를 구현하는 Golang의 flate 라이브러리는 기본적으로 Z_SYNC_FLUSH를 사용합니다. 이 동작은 전체 입력 스트림이 처리된 후 데이터를 플러시합니다.
Golang에서 동일한 출력을 얻는 방법
Python의 zlib과 동일한 출력을 얻으려면 다음을 바꾸십시오. Go 코드에서 Flush()를 사용한 Close():
<code class="go">func compress(source string) []byte { buf := new(bytes.Buffer) w, _ := flate.NewWriter(buf, 7) w.Write([]byte(source)) w.Flush() return buf.Bytes() }</code>
바이트 대 전체 스트림
Python 예제의 출력은 다음과 같습니다. 완전한 스트림이 아닙니다. 첫 번째 문자열을 압축한 후에만 버퍼를 플러시합니다.
바이트 간 일치의 제한
다른 압축 라이브러리의 바이트 간 출력을 다음과 비교합니다. 압축된 데이터와 일치하는 것은 일반적으로 실현 가능하지 않거나 실용적이지 않습니다. 압축 라이브러리에서 생성된 출력은 동일하지 않고 호환 가능함을 보장합니다.
위 내용은 Python과 Golang Zlib가 서로 다른 압축 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!