关于 Java 中的 REST 请求和输出/输入流的说明

Posted

技术标签:

【中文标题】关于 Java 中的 REST 请求和输出/输入流的说明【英文标题】:Clarification about REST request in Java and output/input streams 【发布时间】:2020-09-04 01:46:01 【问题描述】:

我必须用纯 Java 实现发布请求。

我已阅读以下问题:

How to make a post request to a json RESTful Service from Java?

这是示例的一部分

String url = "https://myStore.com/REST-API/";
String requestBody = "\"searchProduct\": \"" + searchProduct + "\"";

URL obj = new URL(url);

HttpsURLConnection connection = (HttpsURLConnection) obj
        .openConnection();

connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");

OutputStream outputStream = connection.getOutputStream();

outputStream.write(requestBody.getBytes());

我的问题是:为什么将参数写在输出流上?据我所知,输出流是用于收集请求的输出,而不是生成请求。

所以只是一个好奇心,考虑到我显然不擅长这个。

【问题讨论】:

【参考方案1】:

InputStreamOutputStream 的目标是抽象流。所谓流,是指处理数据的方式(程序的输入或输出) 如果应用程序从流中接收信息,请使用InputStream。如果它发送数据则OutputStream

InputStream用于从源读取数据。
    var input = new FileInputStream("input.txt");// Read the data
OutputStream用于将数据写入目的地。
    var output = new FileOutputStream("output.txt");// Write the data

您应该阅读答案in the related question:还有更多解释。

【讨论】:

【参考方案2】:

首先解释一下 HttpConnectionURL 的工作原理。

当你想从服务器请求数据时,

    您首先创建与该服务器的连接。 然后将数据写入连接(请求) 最后从连接中读取数据(响应)。

因此,要将数据写入连接,您将获得对 Connection 的 OutputStream 的引用并将数据写入它。

OutputStreamWriter writer = new OutputStreamWriter(
            connection.getOutputStream());
    writer.write("message=" + message);

要从连接中读取数据,您需要获取对连接的 InputStream 的引用并从中读取数据。

InputStreamReader reader = new InputStreamReader(connection.getInputStream());
reader.read();

通常,当数据流出程序(到文件、网络等)时使用 OutputStream,当数据流入程序(从文件、网络等)时使用 InputStream。

我认为这将使您获得所需的清晰度。

This answer explains in detail how HttpConnectionURL works

【讨论】:

以上是关于关于 Java 中的 REST 请求和输出/输入流的说明的主要内容,如果未能解决你的问题,请参考以下文章

Java中的IO流操作

Java IO中的数据输出流(DataOutputStream)和普通输出流(OutputStre

Java 中的缓冲和非缓冲流

Java中的字节输入出流和字符输入输出流

输入输出流

第40节:Java中的IO知识案例