2016-07-26 122 views
0

我正在玩zlib並在閱讀zlib_how後,我仍然有幾個問題。據我所知,在調用任何deflate()之前應該調用deflateInit這是好的,但是當我有意重複使用同一個流不止一次時會發生什麼?正確設置和使用zlib

每次我完成壓縮時,我應該撥打deflateEnd,然後重新初始化每次通過額外呼叫deflateInit調用壓縮?有關內部緩衝區動態分配的內容?

我看到初始化和結束malloc/free很多,是否可以用這種方式配置內部緩衝區將在兩次調用之間重用?

+0

Downvoting沒有給出理由?非常有用... – kreuzerkrieg

回答

3

您應該使用deflateReset()代替deflateEnd()其次deflateInit(),爲了避免不必要的free()的和malloc()的。

您還應該閱讀zlib.h中的文檔,您可能會在這裏找到該文檔。

+0

謝謝馬克! deflateReset()是否適合在調用deflate()後調用Z_STREAM_ERROR?而不是deflateEnd?如果deflateReset()返回Z_STREAM_ERROR,我該怎麼辦?調用deflateEnd()後跟deflateInit()? – kreuzerkrieg

+1

如果得到'Z_STREAM_ERROR',那麼該狀態或者從未被初始化,結束或者被破壞。對於任何一個你不應該調用'deflateEnd()'或'deflateReset()',因爲狀態不再有效。 (雖然這些也可能會注意到並返回'Z_STREAM_ERROR')。如果您正確使用zlib,即初始化,重置和以正確順序結束,並且您從不會無意中在狀態上寫入,那麼您將永遠無法獲得一個'Z_STREAM_ERROR'。 –

+0

這是一個非常重要的說明。再次感謝! – kreuzerkrieg