指定されたURLでHTMLページのコンテンツ全体をフェッチする次のJavaコードがあります。これはより効率的な方法で行うことができますか?どんな改善でも大歓迎です。
public static String getHTML(final String url) throws IOException {
if (url == null || url.length() == 0) {
throw new IllegalArgumentException("url cannot be null or empty");
}
final HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
final BufferedReader buf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder page = new StringBuilder();
final String lineEnd = System.getProperty("line.separator");
String line;
try {
while (true) {
line = buf.readLine();
if (line == null) {
break;
}
page.append(line).append(lineEnd);
}
} finally {
buf.close();
}
return page.toString();
}
線の読みが最適ではないと感じずにはいられません。私はおそらく電話MalformedURLException
によって引き起こされたものを隠していることを知っていopenConnection
ます、そして私はそれで大丈夫です。
私の関数には、HTML文字列に現在のシステムの正しい行末記号を持たせるという副作用もあります。これは必須ではありません。
ネットワークIOは、HTMLの読み取りにかかる時間をおそらく短縮することを理解していますが、それでもこれが最適であることを知りたいと思います。
StringBuilder
ちなみに、オープンのコンストラクターがあれば、InputStream
のすべてのコンテンツを取得して、InputStream
それをに読み込むことができれば素晴らしいと思いStringBuilder
ます。