java - 在Java中将XML作为字符串发布,何时刷新并关闭连接?

标签 java

如果我有这段代码:

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 之前使用 flushclose,那么我将不会收到任何输入。但是如果我在输入读取器下方使用刷新和关闭(在代码段的末尾),那么我会收到此错误:

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/

相关文章:

java - CSV 阅读器不注册更改

java - JFrame 背景颜色不起作用

java - setValueAt(对象aValue, int row, int col)

JAVA,setter 没有将发送到我的构造函数程序的值返回零

java - Eclipse:由于“存在不同情况的资源:'/project/bin/License.txt'”,所以未构建该项目。

java - 调整减法形状的大小

java - 升级到 TomEE 1.7.1 后的类加载问题

java - Spring JMSListener 和 JAXB 编码

java - 'CA1001' 中的未知列 'where clause'

java - 从语言环境到 ansi 代码页再到 java 字符集?