Java InputStream读取网络响应Response数据的方法
封面图
•
2025-10-30
•
Java
194
0
0
0
在 Java 中,使用 `InputStream` 读取网络响应(如通过 `HttpURLConnection` 或 `HttpClient` 获取的响应数据)是一种常见的做法。下面我将介绍几种常用的方法来读取网络响应的 `InputStream` 数据。 --- ## ✅ 方法一:使用 `HttpURLConnection` ```java import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class ReadHttpResponse { public static void main(String[] args) { try { URL url = new URL("https://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // 获取响应码 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); // 获取输入流 InputStream inputStream = connection.getInputStream(); // 使用 BufferedReader 读取数据 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } // 关闭资源 reader.close(); inputStream.close(); connection.disconnect(); System.out.println("Response Data: " + response.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` --- ## ✅ 方法二:使用 `HttpClient`(Java 11+) ```java import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.io.IOException; public class ReadHttpResponseWithHttpClient { public static void main(String[] args) { try { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .GET() .build(); HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); // 获取输入流 InputStream inputStream = response.body(); // 读取数据 byte[] buffer = new byte[1024]; int bytesRead; StringBuilder responseContent = new StringBuilder(); while ((bytesRead = inputStream.read(buffer)) != -1) { responseContent.append(new String(buffer, 0, bytesRead)); } System.out.println("Response Data: " + responseContent.toString()); inputStream.close(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } } ``` --- ## ✅ 方法三:使用 `BufferedReader` 读取 `InputStream` 如果你已经有了一个 `InputStream` 对象,可以直接使用 `BufferedReader` 来读取: ```java import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class ReadFromInputStream { public static void main(String[] args) { // 假设你已经有一个 InputStream InputStream inputStream = ...; // 从网络请求中获取 try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } ``` --- ## ✅ 注意事项 - **关闭资源**:务必在读取完成后关闭 `InputStream`、`BufferedReader` 等资源,避免内存泄漏。 - **处理异常**:网络请求可能抛出 `IOException`,需进行捕获和处理。 - **字符编码**:如果知道响应的字符编码(如 UTF-8),建议在 `InputStreamReader` 中指定: ```java new InputStreamReader(inputStream, "UTF-8") ``` --- ## ✅ 总结 | 方法 | 适用场景 | 优点 | |------|----------|------| | `HttpURLConnection` | Java 8 及以下版本 | 标准 API,兼容性好 | | `HttpClient`(Java 11+) | 新项目,需要异步支持 | 更现代、更简洁 | | `BufferedReader` | 读取文本内容 | 易于使用,适合 HTML、JSON 等文本格式 | --- 如果你有具体的网络请求框架(如 OkHttp、Apache HttpClient),也可以告诉我,我可以提供对应的方法。
上一篇:
java中的内部类总结
下一篇:
在线安装eclipse中html/jsp/xml editor插件
标题录入,一次不能超过6条
留言
评论