色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

java - 對gzip文件進行流式解壓時,如何解壓出其中某些單獨的數據塊中的數據?

瀏覽:73日期:2023-11-06 18:09:25

問題描述

場景描述:

現有許多行日志文本,按天壓縮成一個個TB級的gzip文件。使用流對每個壓縮文件的數據段進行傳輸然后解壓,對解壓出的文本分詞并索引以后查到這個詞時,定位到這個詞所在的文件和段,再用流傳輸并解壓(實際上是想利用已有的壓縮文件構造一個類似ES的搜索引擎)

現在的問題是,因為接收到的不是完整的壓縮文件而是塊狀二進制數據,所以接收的數據由于信息不完全而無法解壓

現在想實現這樣的功能:首先將接收到的流數據解壓還原為完整的數據(原始日志數據以換行符分隔,能得到每段流數據壓縮前的文本和對應文件的偏移量就好),然后考慮到傳輸和存儲等過程可能使數據出錯,所以針對每段數據流,在出錯的情況下解壓出盡可能多的數據。

部分相關代碼如下:(改自https://stackoverflow.com/que...)

import zlibimport tracebackCHUNKSIZE=30d = zlib.decompressobj(16 + zlib.MAX_WBITS)f = open(’test.py.gz’,’rb’)buffer = f.read(CHUNKSIZE)i = 0while buffer : i += 1 try:#skip two chunk if i < 3 or i > 4: outstr = d.decompress(buffer) print(’*’*10 + outstr + ’#’*10) except Exception, e:print(traceback.print_exc()) finally:buffer = f.read(CHUNKSIZE)outstr = d.flush()print(outstr)f.close()

當i>=3以后,每次循環均報錯我的結論是 若流不連續(跳過接收部分數據),則之后的數據都無法解壓。問題1:如果做到能正確的解壓出收到的每部分數據?(因為可能牽涉到gzip壓縮的算法和數據結構,我正在看相關代碼。如果可以通過追加傳輸頭部的某一chuck或者需要解壓的數據的前后某些chuck能解決問題也算可以)問題2:如果不能正確的解壓接收到的每部分數據,那么如何做到解壓出盡可能多的數據?

問題解答

回答1:

我覺得可以做一個出錯重新續傳的功能,傳輸前備份當前這一段數據流,你得判斷出當前傳輸的這一段數據流是否傳輸完整了。這就要求傳送端和接收端之間的傳輸協議是你能改動的,出現錯誤就立刻反饋fail給傳輸端,從剛才這段重新續傳,沒有錯誤就反饋OK,繼續傳輸下一段。這樣就能保證數據的完整性。如果文件太大,可以在內存中備份多些數據段,做些細節性的判斷。

回答2:

不太確定你描述的問題,不過在stackoverflow 有些問答或許有幫助。

How can I decompress a gzip stream with zlib?

Python decompressing gzip chunk-by-chunk

標簽: java
主站蜘蛛池模板: 亚洲精品国产字幕久久不卡 | 欧美一级毛片100部 欧美一级毛片aaaaa | 91视频99 | 久草在线视频免费资源观看 | 日本精品夜色视频一区二区 | 欧美日韩中文国产一区二区三区 | 国产精选经典三级小泽玛利亚 | 美女视频黄a视频美女大全 美女视频黄a视频免费全程 | 国产成人精品系列在线观看 | 国产一区二区三区欧美精品 | 久久日本三级韩国三级 | 一级做a爰片性色毛片男 | 久久免费99精品久久久久久 | 一级毛片在线观看视频 | 欧美真人视频一级毛片 | 亚洲一区二区在线 | 亚洲综合网在线观看首页 | 国产成人精品免费视频大全可播放的 | 日韩毛片免费在线观看 | 久久久久久91 | 天天欲色成人综合网站 | 国产精品亚洲欧美云霸高清 | 精品在线99 | 精品久久久久久无码中文字幕 | 欧美高清一级毛片免费视 | 91精品免费久久久久久久久 | 黄色一级毛片网站 | 欧美成人高清手机在线视频 | 波多野结衣aⅴ在线 | 成人毛片免费视频播放 | 91久久国产口精品久久久久 | 欧美成人免费观看久久 | 高清欧美性狂猛bbbbbbxxxx | 欧美黑人性xxx猛交 欧美很黄视频在线观看 | 亚洲黄色成人 | 久久国产精品二国产精品 | 日韩在线观看一区 | 亚洲成在 | 久久亚洲精品中文字幕 | 国产91久久精品一区二区 | 成人网18免费网站在线 |