से URLConnection ऑब्जेक्ट को हटा रहा है मेरे प्रोग्राम में मुझे कुछ HTTP सर्वर पर खुले कनेक्शन की सूची ट्रैक करने की आवश्यकता है - यदि आवश्यक हो तो उन्हें एक साथ डिस्कनेक्ट करने के लिए।ArrayList <URLConnection>
मुझे निम्नलिखित समस्या का सामना करना पड़ा। यदि मैं HTTP सर्वर से कनेक्ट करता हूं तो सबकुछ सही काम करता है, लेकिन अगर HTTPS पर है, तो कनेक्शन सूची से हटा नहीं दिए जाते हैं। यह स्मृति रिसाव की ओर जाता है।
उदाहरण:
package test;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
try {
ArrayList<URLConnection> al = new ArrayList<URLConnection>();
URL url = new URL("http://www.example.com");
URLConnection conn = url.openConnection();
al.add(conn);
System.out.println("Result of removing = " + al.remove(conn));
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
}
तो URL भेजता है "http://www.example.com" फिर "को हटाने = सच का परिणाम"।
लेकिन यदि यूआरएल "https://www.example.com" पर इंगित करता है तो "हटाने का परिणाम = झूठा"।
मुझे ऐसा व्यवहार समझ में नहीं आता है। मेरे पास कुछ धारणाएं हैं, लेकिन सुनिश्चित नहीं हैं ...
क्या कोई मदद कर सकता है?
तो, यह वास्तव में _equals _.. के अजीब व्यवहार का मामला है। मैंने इस तरह के स्पष्टीकरण को भेजा क्योंकि यह वास्तव में पागल है ... धन्यवाद! बीटीडब्ल्यू, क्या आप ऐसे _equals_ व्यवहार वाले वर्गों के किसी अन्य उदाहरण को नहीं जानते? –
नहीं, वास्तव में मुझे यह भी पता नहीं था। * बराबर * के एक दोषपूर्ण कार्यान्वयन का एकमात्र मामला * जिसे मैं अब याद कर सकता हूं वह java.net.URL है (इस मामले में दोष स्थिरता के बारे में है: समानता संबंध DNS रिज़ॉल्यूशन पर निर्भर करता है, इस प्रकार दो यूआरएल उदाहरण हो सकते हैं या नहीं हल किए गए आईपी पते के आधार पर बराबर हो, लेकिन यह एक अलग कहानी है)। – Javier
अब सब कुछ स्पष्ट है। धन्यवाद! –