我正在使用HttpURLConnection在Java中下載頁面。我忘了釋放連接,我認爲這給我的系統(網絡爬蟲)帶來了一些問題。在Java中,如何使用HttpURLConnection連接並釋放端口/套接字?
現在我已經做了一些測試,看到斷開連接後,在Windows上的netstat
命令的結果中,某些連接仍然像TIME_WAIT一樣。
我該如何立即釋放此連接?
示例代碼:
private HttpURLConnection connection;
boolean openConnection(String url) {
try {
URL urlDownload = new URL(url);
connection = (HttpURLConnection) urlDownload.openConnection();
connection.setInstanceFollowRedirects(true);
connection.connect();
connection.disconnect();
return true;
} catch (Exception e) {
System.out.println(e);
return false;
}
}
什麼是差異readiing直接到一個InputStream或類似的文檔,到BufferedInputStream? – 2011-05-29 03:38:02
'BufferedInputStream'在內存中緩衝塊。注意與您遇到的問題相關的問題,只要您以通常的方式關閉它即可。做'System.setProperty(「http.keepAlive」,「false」)'應該這樣做。 – BalusC 2011-05-29 03:50:59
BufferedInputStream將套接字從套接字讀取到緩衝區中,然後以您請求的任何大小的塊傳送內容給您。從一個InputStream讀取少量的套接字連接數據效率極低。但是,如果您只是自己進行批量讀取,則不需要BufferedInputStream。 – 2011-05-29 04:43:32