2017-05-18 4 views
0

Wenn ich dieses Stück Code:Veröffentlichen von XML als Zeichenfolge in Java, wann die Verbindung zu spülen und zu schließen?

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(); 

Muss ich dann müssen noch die Verwendung:

con.getOutputStream().flush(); 
con.getOutputStream().close(); 

Da Wenn ich die flush und close vor dem Eingabeleser verwenden, dann werde ich nicht erhalten jede Eingabe. Aber wenn ich die Flush und das Schließen unter dem Inputreader (am Ende des Stücks Code) dann bekomme ich diesen Fehler:

java.net.ProtocolException: Kann nicht schreiben, nach dem Lesen der Eingabe.

+2

bündig sicher Daten linken Puffer zu machen, nicht um den Strom zu schließen, bis Sie absolut fertig sind. – zubergu

+0

nicht verwandt, aber warum URLEncode ein XML-Dokument? – Henry

Antwort

1
Close() 

rufen Sie auch die flush() Methode auf. Sie müssen also eigentlich nur nah und beide zusammen anrufen, weil sie redundant sind. Sie erhalten keine Daten, da Sie den Abschluss auf den Stream der Verbindung anwenden. Ich empfehle die Verwendung von Outputstreamwriter und Bufferedwriter aus den Streams.

Etwas wie folgt aus:

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(); 
Verwandte Themen