突き出た「A」の非有限ストリームを返すサーバーに接続します。すなわち:これ
$ nc 1.2.3.4 9001
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA^C
Apache httpコンポーネントライブラリは、サーバーから応答全体を取得してから解析するようです。JVMがクラッシュしないようにサイズを制限する方法は?
これは私のコードです:
流暢なAPI付き:
public static void main(String[] args) throws ClientProtocolException, IOException {
Request.Get(url).execute().discardContent();
}
低レベルAPI付き:
public static void main(String[] args) throws ClientProtocolException, IOException {
String url = "http://1.2.3.4:9001/";
DefaultHttpClient httpclient = new DefaultHttpClient();
System.out.println("A");
HttpGet request = new HttpGet(url);
System.out.println("B");
HttpResponse hr = httpclient.execute(request);
System.out.println("C");
}
私にこれを取得します:
A
B
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.http.util.ByteArrayBuffer.expand(ByteArrayBuffer.java:62)
at org.apache.http.util.ByteArrayBuffer.append(ByteArrayBuffer.java:92)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:278)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at com.dudebro.WhatHappen.main(WhatHappen.java:103)
関連する質問は無関係であることに注意してください。APIに応答本文を要求することすらしませんが、それでもクラッシュします。