【问题标题】:Clarification about REST request in Java and output/input streams关于 Java 中的 REST 请求和输出/输入流的说明
【发布时间】: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());

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

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

【问题讨论】:

    标签: java rest post outputstream


    【解决方案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 的工作原理。

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

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

      因此,要将数据写入连接,您将获得对 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 2015-06-18
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多