>백엔드 개발 >Golang >Python과 Golang Zlib가 서로 다른 압축 출력을 생성하는 이유는 무엇입니까?

Python과 Golang Zlib가 서로 다른 압축 출력을 생성하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-28 18:31:29847검색

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.