예기치 않은 결과를 나타내는 zlib
의 예가 있습니다.Python의 zlib에서 예기치 않은 동작이 무엇입니까?
나는 간단한 문자열 압축으로 시작하는 경우 : 나는 내가 예상 정확히 무엇을 얻을 반대 할 경우 지금
>>> import zlib
>>> import binascii
>>> compressed = binascii.hexlify(zlib.compress('first_message'))
>>> compressed
'789c4bcb2c2a2e89cf4d2d2e4e4c4f05002651056d'
을 그러나
>>> zlib.decompress(compressed.decode("hex"))
'first_message'
을 나는 예상치 못한 결과를 얻을이를 시도하는 경우 :
>>> d = zlib.decompressobj()
>>> d.decompress(compressed.decode("hex"))
'first_message'
>>> d = zlib.decompressobj()
>>> d.decompress(compressed[:-2].decode("hex"))
'first_message'
무엇이 여기에 있습니까? 왜이 둘은 같은 결과를 반환합니까?
감압 객체를 엄격하게 만드는 방법이 있습니까? 즉, 마지막 바이트도 포함하게됩니까? – c00kiemonster
개체에 마지막 바이트를 지정하지 않으면 개체에 어떻게 포함시킬 수 있습니까? –
이 동작은'socket' 예제에서 발견되었습니다. 미리 압축 된 여러 개의 메시지를 미리 구분 된 구분 기호로 구분하여 보냈습니다. 그러나 실수로'compressed [: - 2] '를 받았고 압축이 풀 렸습니다. 다음에 배정 된 바이트와 분리 기호를 받았기 때문에 이것은 성가신 일입니다. 따라서 여러 개의 압축 된 메시지가 동기화되지 않았고 제대로 압축되지 않았습니다. – c00kiemonster