在 java.net 包中,Socket 和 ServerSocket 是底層網路通訊的基石,但直接操作它們需要處理協議解析、流管理、異常處理等繁瑣細節。URLConnection 作為高層抽象,封裝了 HTTP/HTTPS 等應用層協議細節,讓開發者像讀取本地檔案一樣訪問網路資源,是 Java 網路編程中最實用、最常被忽視的「秘密類」。
new URL("https://example.com")url.openConnection()setRequestProperty() 設置 User-Agent、Cookie 等conn.connect() → conn.getInputStream()BufferedReader → InputStreamReader → InputStream 三層包裝高效讀取行文本public class URLClient {
public String getDocumentAt(String urlString) {
StringBuilder document = new StringBuilder();
try {
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
// 關鍵:三層流包裝模式
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
document.append(line).append("\n");
}
}
} catch (MalformedURLException e) {
System.err.println("無效 URL: " + urlString);
} catch (IOException e) {
System.err.println("連接失敗: " + urlString);
}
return document.toString();
}
}
BufferedReader(InputStreamReader(InputStream)) 是 Java I/O 的經典裝飾器模式應用,不僅適用於網路流,同樣適用於檔案、壓縮流、加密流等場景,掌握此模式能靈活組合各種流處理需求。
MalformedURLException:URL 格式錯誤,屬於編程期錯誤,應在開發階段修復IOException:網路波動、超時、服務器錯誤等運行期異常,必須有重試、降級、日誌記錄等容錯機制雖然 URLConnection 屬於 JDK 標準庫,零依賴,但功能較基礎。生產環境推薦:
URLConnection 是 Java 網路編程的入門基石,理解其工作原理有助於掌握 HTTP 協議本質。雖然現代開發多使用高級框架,但在 Android 早期版本、嵌入式環境、零依賴微型工具等場景下,它依然是最輕量、最可靠的選擇。