2010-11-12 30 views

回答

2

這可能會帶來可怕的表現,因爲inflate()函數可能會有一些啓動成本。

我會建議只是用合理的輸出緩衝區大小,然後在每次調用inflate()後迭代緩衝區,收集找到的所有完整行。當然,很可能會有一個「尾巴」,即不完整的線條,您需要跟蹤下一輪。

+0

是的,這是一個很好的方法,但是應該注意不要超出拆包實際獲得的結果和未初始化的結果。 – sharptooth 2010-11-12 11:48:13

+0

感謝您的提示。做簿記有點痛苦,但似乎有效。訣竅是確保不要通過'zStream.avail_out'來讀取並且在這一點上空終止緩衝區 - 這是需要爲新行分析的剪輯緩衝區。不過,我已經建立了一個大緩衝區,並且運行得非常快。 – 2010-11-12 13:43:22

2

當您撥打inflate()時,您傳遞一個指向z_stream_s結構的指針。 z_stream_s::avail_out該結構的成員變量正好用於指定輸出緩衝區的大小。