以下代码
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合约中推断出这一点?发生了什么以及为什么?
conn配置
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合同中看到这一点。即它应该写在某个地方,我不能生成输入流,直到写东西。在任何情况下,实现都可以允许这种情况,只需要让该流的读者等待。