我正在玩zlib
並在閱讀zlib_how後,我仍然有幾個問題。據我所知,在調用任何deflate()
之前應該調用deflateInit
這是好的,但是當我有意重複使用同一個流不止一次時會發生什麼?正確設置和使用zlib
每次我完成壓縮時,我應該撥打deflateEnd
,然後重新初始化每次通過額外呼叫deflateInit
調用壓縮?有關內部緩衝區動態分配的內容?
我看到初始化和結束malloc/free很多,是否可以用這種方式配置內部緩衝區將在兩次調用之間重用?
我正在玩zlib
並在閱讀zlib_how後,我仍然有幾個問題。據我所知,在調用任何deflate()
之前應該調用deflateInit
這是好的,但是當我有意重複使用同一個流不止一次時會發生什麼?正確設置和使用zlib
每次我完成壓縮時,我應該撥打deflateEnd
,然後重新初始化每次通過額外呼叫deflateInit
調用壓縮?有關內部緩衝區動態分配的內容?
我看到初始化和結束malloc/free很多,是否可以用這種方式配置內部緩衝區將在兩次調用之間重用?
您應該使用deflateReset()
代替deflateEnd()
其次deflateInit()
,爲了避免不必要的free()
的和malloc()
的。
您還應該閱讀zlib.h中的文檔,您可能會在這裏找到該文檔。
謝謝馬克! deflateReset()是否適合在調用deflate()後調用Z_STREAM_ERROR?而不是deflateEnd?如果deflateReset()返回Z_STREAM_ERROR,我該怎麼辦?調用deflateEnd()後跟deflateInit()? – kreuzerkrieg
如果得到'Z_STREAM_ERROR',那麼該狀態或者從未被初始化,結束或者被破壞。對於任何一個你不應該調用'deflateEnd()'或'deflateReset()',因爲狀態不再有效。 (雖然這些也可能會注意到並返回'Z_STREAM_ERROR')。如果您正確使用zlib,即初始化,重置和以正確順序結束,並且您從不會無意中在狀態上寫入,那麼您將永遠無法獲得一個'Z_STREAM_ERROR'。 –
這是一個非常重要的說明。再次感謝! – kreuzerkrieg
Downvoting沒有給出理由?非常有用... – kreuzerkrieg