GZIP राइटर को बंद करने से डेटा हानि होती है
गो में, gzip.Writer को बंद करने के लिए defer का उपयोग करने पर अप्रत्याशित EOF त्रुटियाँ हो सकती हैं ज़िपित डेटा से पढ़ना। इस समस्या को हल करने के लिए, आइए समस्या की बारीकियों पर ध्यान दें और एक वैकल्पिक समाधान प्रदान करें।
समस्या को समझना:
gzip.Writer's Close विधि दो कार्य करती है : यह किसी भी अलिखित डेटा को अंतर्निहित लेखक तक पहुंचाता है और GZIP पाद लेख लिखता है। हालाँकि, दिए गए कोड में:
func zipData(originData []byte) ([]byte, error) {
// ...
defer gw.Close()
// ...
}
डिफ़र स्टेटमेंट gw.Close() के निष्पादन में तब तक देरी करता है जब तक कि आसपास का फ़ंक्शन zipData वापस नहीं आ जाता। इसलिए, जब zipData समाप्त होता है और वापस लौटता है, तो पादलेख एक सहेजे न गए बफ़र पर लिखा जाता है और लौटाए गए बाइट सरणी में शामिल नहीं होता है। ज़िप किए गए डेटा से पढ़ने का प्रयास करते समय यह अप्रत्याशित ईओएफ त्रुटियों का कारण बनता है। ज़िपित डेटा:
func zipData(originData []बाइट) ([]बाइट, त्रुटि) { //... यदि _, त्रुटि := gw.Write(originData); त्रुटि != शून्य { वापसी शून्य, त्रुटि } यदि त्रुटि := gw.Flush(); त्रुटि != शून्य { वापसी शून्य, त्रुटि } gw.बंद करें() //... }
लौटने से पहले लेखक को स्पष्ट रूप से बंद करके, आप सुनिश्चित करते हैं कि GZIP पाद लेख सहेजे गए बफर पर लिखा गया है और इस प्रकार लौटाए गए बाइट सरणी में शामिल है। यह अप्रत्याशित ईओएफ त्रुटियों को रोकता है और ज़िप किए गए डेटा की अखंडता की गारंटी देता है।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3