最近遇到了乙個http請求返回乙個gz壓縮包的問題,前前後後搞了3天,總算是把整個流程以及處理的細節搞明白了,總結一篇部落格記錄分享一下。
流量方的優化
獲取某推廣告成效資料的時候由於資料量很多,可能會導致response資料量過大從而造成請求失敗的問題。
某推服務方設計了這樣一種方式:先將請求的到的資料寫入到乙個json檔案中,然後將這個json檔案使用gzip壓縮(經過實際測試,乙個100多k大小的json檔案使用gzip壓縮後只有十幾k的大小,並且gzip壓縮後是不保留原檔案的)。
也就是說,與我們平時處理的請求不同的是,現在這種情況下傳送get請求得到的是乙個gz檔案的資料流。
解決思路
其實解決問題的思路有2個:乙個是根據gz資料流將gz檔案寫入到本地,然後在本地解壓這個檔案,讀取解壓後的檔案;另外一種思路是直接根據gz資料流將json檔案解壓到本地,省去了中間在本地生成gz壓縮檔案的過程!
一目了然:在上面描述的業務場景中,肯定是第二種解決方案最優!
優化的三方包
從網上找了乙個包去處理檔案解壓縮的問題,但是其原始碼本身有一些問題,略微修改了一下其原始碼後便可使用了。
原檔案存在的問題可以看readme的描述。
自己寫了乙個demo專門用來展示兩種解決方案的實現過程。
麻雀雖小,五臟俱全,這個demo用到了自定製錯誤、http的連線池,以及go中常用的錯誤返回機制。
專案位址如下,歡迎star:
使用golang解壓縮檔案遇到的問題及解決方法
使用unpackit包解壓gz包遇到的乙個問題與解決方案
Go壓縮檔案
首先是恭喜ig獲得s8全球總決賽冠軍,ig牛逼。但咱是一介草民,狂歡後,還是得老老實實的開始敲 最近做了乙個給底層韌體壓縮加密的工具,是使用c 做的,已經提交出去可以正常使用的。既然在學習go語言,那我很慣性的想到,能不能使用go來做這塊,咱介面還是使用winform,壓縮這一塊可以使用go來做,c...
go語言zip壓縮檔案
博海無涯。上 func zipfiles filename string,files string,oldform,newform string error defer newzipfile.close zipwriter zip.newwriter newzipfile defer zipwrit...
利用批處理輕鬆壓縮檔案
備份資料前用 winrar 壓縮一下是個不錯的注意,這樣做至少有以下優點 1.節省空間。這個要視原始檔的性質而定,一般而言,文字型的辦公文件壓縮比要高一些,而多 檔案壓縮效果往往不明顯。2.加快複製速度。備份檔案往往需要複製到 n個不同的位置 儲存介質,即使壓縮後檔案體積變化不大,最好也用 儲存方式...