31
31
32
32
import java .io .IOException ;
33
33
import java .io .InputStream ;
34
- import java .io .PrintWriter ;
34
+ import java .io .OutputStream ;
35
35
import java .lang .management .ManagementFactory ;
36
36
import java .lang .management .ThreadInfo ;
37
37
import java .lang .management .ThreadMXBean ;
40
40
import java .net .InetSocketAddress ;
41
41
import java .net .Proxy ;
42
42
import java .net .URL ;
43
- import java .nio .charset .Charset ;
44
43
import java .util .ArrayList ;
45
44
import java .util .List ;
46
45
import java .util .concurrent .Executors ;
@@ -176,9 +175,9 @@ public void handle(HttpExchange trans) {
176
175
byte [] responseBody = new byte [RESPONSE_DATA_LENGTH ];
177
176
for (int i =0 ; i <responseBody .length ; i ++)
178
177
responseBody [i ] = 0x41 ;
179
- trans .sendResponseHeaders (200 , 0 );
180
- try ( PrintWriter pw = new PrintWriter ( trans .getResponseBody (), false , Charset . forName ( "UTF-8" ) )) {
181
- pw . print (responseBody );
178
+ trans .sendResponseHeaders (200 , responseBody . length );
179
+ try ( OutputStream os = trans .getResponseBody ()) {
180
+ os . write (responseBody );
182
181
}
183
182
} else if (path .equals ("/secondCall" )) {
184
183
int port2 = trans .getRemoteAddress ().getPort ();
@@ -201,10 +200,10 @@ public void handle(HttpExchange trans) {
201
200
responseBody [i ] = 0x41 ;
202
201
// override the Content-length header to be greater than the actual response body
203
202
trans .sendResponseHeaders (200 , responseBody .length +1 );
204
- try (PrintWriter pw = new PrintWriter (trans .getResponseBody (), false , Charset .forName ("UTF-8" ))) {
205
- pw .print (responseBody );
206
- }
203
+ OutputStream os = trans .getResponseBody ();
204
+ os .write (responseBody );
207
205
// now close the socket
206
+ // closing the stream here would throw; close the exchange instead
208
207
trans .close ();
209
208
}
210
209
} catch (Exception e ) {
0 commit comments