1

下面的代码

OutputStream outputWeb = conn.getOutputStream();

File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);

InputStream inputWeb = conn.getInputStream();           

while((ch=inputFile.read()) >= 0) {
    outputWeb.write(ch);
}

导致IOException消息“服务器返回 HTTP 响应代码:500 for URL:myurl”就在从连接中获取 InputStream 的行。

虽然下面的代码不会导致任何异常并且工作正常

OutputStream outputWeb = conn.getOutputStream();

File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);

while((ch=inputFile.read()) >= 0) {
    outputWeb.write(ch);
}

InputStream inputWeb = conn.getInputStream();

唯一的区别是在一些写入连接之后获取输入流。

如何从 API 合约中推断出这一点?发生了什么,为什么?

连接配置

URL url = new URL("https://myurl");
HttpURLConnection conn;

// creating http connection 
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-type", "audio....");

更新

现在原则上很清楚,但我仍然希望在 API 合同中看到这一点。即它应该写在某个地方,直到写一些东西我才能生成输入流。在任何情况下,实现都可以允许这样做,只是迫使该流的读者等待。

4

0 回答 0