关于 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】:InputStream
和 OutputStream
的目标是抽象流。所谓流,是指处理数据的方式(程序的输入或输出)
如果应用程序从流中接收信息,请使用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 请求和输出/输入流的说明的主要内容,如果未能解决你的问题,请参考以下文章