如果我有这段代码:
StringBuilder postData = new StringBuilder();
postData.append(URLEncoder.encode(cxmlContent, "UTF-8"));
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
URL url = new URL(urlString);
URLConnection con = url.openConnection();
// specify that we will send output and accept input
con.setDoInput(true);
con.setDoOutput(true);
con.setConnectTimeout(20000); // long timeout, but not infinite
con.setReadTimeout(20000);
con.setUseCaches(false);
con.setDefaultUseCaches(false);
// tell the web server what we are sending
con.setRequestProperty("Content-Type", "text/xml; charset=utf-8" );
con.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
con.getOutputStream().write(postDataBytes);
// reading the response
InputStreamReader reader = new InputStreamReader(con.getInputStream());
StringBuilder buf = new StringBuilder();
char[] cbuf = new char[ 2048 ];
int num;
while ( -1 != (num=reader.read( cbuf )))
{
buf.append( cbuf, 0, num );
}
String result = buf.toString();
那么我还需要使用:
con.getOutputStream().flush();
con.getOutputStream().close();
因为如果我在 inputreader 之前使用 flush
和 close
,那么我将不会收到任何输入。但是如果我在输入读取器下方使用刷新和关闭(在代码段的末尾),那么我会收到此错误:
java.net.ProtocolException:读取输入后无法写入输出。
最佳答案
Close()
调用 也是flush()方法。 所以你实际上只需要同时调用 close 和两者,因为它们是多余的。 您没有收到数据,因为您对连接流应用了关闭。 我建议使用从流创建的 Outputstreamwriter 和 Bufferedwriter。
类似这样的事情:
OutputStreamWriter out = new OutputStreamWriter( connection.getOutputStream());
out.write("string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream()));
String decodedString; while ((decodedString = in.readLine()) != null) { System.out.println(decodedString); } in.close();
关于java - 在Java中将XML作为字符串发布,何时刷新并关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44039585/