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():
func compress(source string) []byte {
buf := new(bytes.Buffer)
w, _ := flate.NewWriter(buf, 7)
w.Write([]byte(source))
w.Flush()
return buf.Bytes()
}
바이트 대 전체 스트림
Python 예제의 출력이 완전한 스트림이 아니라는 점에 유의하는 것이 중요합니다. 첫 번째 문자열을 압축한 후에만 버퍼를 플러시합니다.
바이트 간 일치의 제한
다른 압축 라이브러리의 바이트 간 출력을 다음과 비교합니다. 압축된 데이터와 일치하는 것은 일반적으로 실현 가능하지 않거나 실용적이지 않습니다. 압축 라이브러리에서 생성된 출력은 동일하지 않고 호환 가능함을 보장합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3