Я работал над постом HTTP, используя java, и столкнулся со странным поведением потока.Вот что произошло:
Func() {
String data = “MyMessage”
URL url = new URL("http://edsall:8080");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
wr.write(data);
wr.flush();
// Get the response
String line;
while ((line = rd.readLine()) != null) {
}
wr.close();
rd.close();
}
Request recvd by the server:
POST / HTTP/1.1
User-Agent: Java/1.6.0_20
Host: edsall:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 0
Обратите внимание, что длина контента всегда равна 0. Изначально я не мог понять, в чем проблема.Наконец, следующая перестановка кода сделала свое дело:
Func() {
…
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
…
}
Я не могу понять это ясно.Как открытие дескриптора входного потока влияет на выходной поток?