解決java.util.zip.ZipException: Not in GZIP format報錯問題
java.util.zip.ZipException: Not in GZIP format報錯
最近在對接第三方接口時遇到了一個報錯,java.util.zip.ZipException: Not in GZIP format,因為公司在推行使用GPT提高開發(fā)效率,所以我遇事不決先問GPT
GPT給我的答案
java.util.zip.ZipException: Not in GZIP format 的報錯一般是由以下幾個原因導致的:
> 1. 壓縮文件格式不正確。也就是說,你試圖解壓一個不是GZIP格式的文件。確保要解壓的文件確實使用GZIP格式進行壓縮。
> 2. 文件內容已損壞。有可能壓縮時引入了錯誤,或在傳輸過程中文件被篡改了。導致文件內容已經損壞,無法正常解壓。
> 3. 編碼格式不匹配。GZIP格式只支持部分編碼,如果壓縮時使用了不支持的編碼,也可能導致解壓失敗。
> 4. Java 版本不匹配。GZIP格式在不同的Java版本中實現(xiàn)可能有差異,如果壓縮時使用的是另一個Java版本,也可能解壓失敗。
> 5. 代碼存在bug。你的解壓代碼可能存在bug,導致無法正常讀取GZIP格式。可以對比官方實現(xiàn),檢查代碼是否存在問題。
為了解決這個報錯,你可以分別檢查以下幾點:
> 1. 檢查原壓縮文件的確使用GZIP格式。如使用zip -d查看壓縮格式。
> 2. 使用文件校驗器 檢查壓縮文件是否被篡改。
> 3. 在解壓前使用工具來檢查文件是否損壞。
> 4. 檢查壓縮和解壓所用的編碼格式是否一致。
> 5. 驗證壓縮和解壓所用的Java版本是否匹配。
> 6. 對比官方GZIP解壓縮代碼,檢查你的解壓縮代碼是否存在bug。
> 7. 將原壓縮文件解壓后再重新壓縮,看是否仍然報該錯。來排查是否是文件本身的問題。 除此之外,還可以嘗試使用其他GZIP庫來解壓,或者直接用 unzip命令,看是否仍然報同樣的錯誤。這可以排除代碼方面的問題。
嗯,說了一大堆有用的廢話,還是自己打斷點吧。
很快啊,我定位到封裝了發(fā)送http請求的方法中,在其中有一個解析相應數(shù)據(jù)的方法EntityUtils.toString(response.getEntity(), "utf-8");
因為本人閱讀源碼的能力不強,在這就不贅述底層邏輯了,總之就是這行報錯了,一開始覺得是我請求頭的問題,改了又改,無果,通過各種套路GPT得到了以下回答:
> 問:如果響應頭中缺少Content-Encoding會導致Not in GZIP format報錯嗎
> 答:是的。如果響應主體確實使用了gzip編碼,但響應頭卻缺少Content-Encoding字段,這很容易導致Not in GZIP format的錯誤。 具體的原因是: 由于缺少Content-Encoding字段,客戶端不知道響應使用了gzip編碼。
> 嘗試使用gzip解碼器解碼主體內容時,會發(fā)現(xiàn)內容并非有效的gzip編碼格式,就報Not in GZIP format的錯誤。
> 所以如果響應確實使用了gzip編碼,Content-Encoding字段就非常重要:
> - 沒有Content-Encoding字段,客戶端無法意識到響應使用了gzip編碼
> - 嘗試使用gzip解碼器解碼主體內容時,會報Not in GZIP format錯誤 相反,如果響應主體內容沒有使用gzip編碼,那么缺少Content-Encoding字段就不會報這個錯。
> 所以,為了解決這個問題,關鍵在于確保:
> 1. 響應主體是否確實使用了gzip編碼
> 2. 響應頭正確加入Content-Encoding: gzip字段
> 3. 然后使用gzip解碼器來解碼主體內容 只有響應主體確實使用gzip編碼、但響應頭又缺少Content-Encoding字段的情況下, 才會導致Not in GZIP format錯誤。 只有當響應真正不是gzip編碼的時候,這個錯誤才不會出現(xiàn)。
通過它的解答,我開始懷疑是對接方的問題,于是乎,第二天上班找到對面負責人進行禮貌問候,不出五分鐘,真的非???,那邊答復:好了
我(已黑化):啊?
白加班了。。。
由于是小公司沒什么話語權,對接方還是上游,所以沒有仔細問原因,但是我覺得大概率是響應頭的問題,如果大家有別的看法可以學術討論下。
其實這次問題并沒有涉及到什么技術問題,只是溝通存在問題,這種情況我在開發(fā)時也遇到很多次了,所以寫代碼的同時也要注意及時溝通,遇到不明白的問題問同事,問對接方,自己悶著是解決不了問題的,問問問,問到明白為止、問到問題解決為止。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用ElasticSearch6.0快速實現(xiàn)全文搜索功能的示例代碼
本篇文章主要介紹了使用ElasticSearch6.0快速實現(xiàn)全文搜索功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
Spring MVC 中獲取session的幾種方法(小結)
這篇文章主要介紹了Spring MVC 中獲取session的幾種方法(小結),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
Java 通過AQS實現(xiàn)數(shù)據(jù)組織
這篇文章主要介紹了通過AQS實現(xiàn)數(shù)據(jù)組織,想了解AQS的同學可以參考下2021-04-04
SpringBoot中的@ApiModelProperty注解作用
這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01

