2012-06-07 53 views
2

我有一個可能很大(> 4GB)的日誌文件,所以我想「在運行中對它進行gzip」,這意味着我想直接在文件末尾插入文本gzip文件(我想爲logback創建自己的文件appender)。 是否可以追加東西到現有的gzip文件?它看起來像唯一的方法是用GZIPInputStream打開現有的,讀取它並用GZIPOutputStream將數據寫入到一個新文件中,並在新文件的末尾附加新的東西,然後我想刪除舊的gzip並重命名新的舊名...使用Java將數據追加到gzip文件中

我錯了嗎?更好的想法?

謝謝!

回答

0

雖然我不知道針對此問題的特定於Java的解決方案,但有一些本機系統解決方案(假設您在* nix上,並且不在意它不是平臺無關的)。在Unix/Linux SE提供了一些這方面的想法(即壓縮loopback文件系統):

Add/update a file to an existing tar.gz archive?

+1

這是.tar.gz,而不是.gz。 –

2

你可以看一下那個進來如何追加到gzip壓縮文件,以及如何使越來越多的gzip zlib的分佈例文件的日誌條目。您可以從zlib.net獲取zlib分佈,並查看examples/gzappend.c,examples/gzlog.cexamples/gzlog.h。它們用C語言編寫,可能需要zlib功能,這些功能不易使用java.util.zip接口來訪問zlib。

這些方法不需要重新創建gzip文件。

2

gzip格式允許連接到以前gzip的字節流,允許在解壓縮時顯示爲單個字符串。

只需在最後附加gzip數據即可。

+0

對於短日誌條目來說這不是一個好方法。每個gzip文件增加18個字節的開銷,並加上壓縮短字符串,例如日誌條目通常無效。所以你最好只使用普通的日誌文件。要獲得gzip壓縮的好處,您需要使用我在我的答案中指出的示例中的技術將它保留在單個gzip流中。 –