0
我有一個場合,我需要從給定的URL返回一個閱讀器。在這種情況下,url始終有一個像http或https這樣的協議。我毫無困難地爲此創建代碼。連接閱讀器
我想知道更好的做法是,前一種方法還是後一種?
public Reader getContents (final URL url) {
try {
final Reader stream = new InputStreamReader(url.openConnection().getInputStream());
final StringBuilder builder = new StringBuilder();
int character;
while ((character = stream.read()) != -1)
builder.append((char)character);
stream.close();
return new StringReader(builder.toString());
} catch (final IOException e) {
e.printStackTrace();
}
return null;
}
該方法首先從URL內容創建一個String,然後返回該String的讀者。在下面的代碼中,我只是返回InputStreamReader。我擔心的一個問題是輸入流沒有被閱讀器關閉,因爲可能不會調用Reader.close()
方法。我想知道更糟糕的是,不關閉連接輸入流或關閉字符串輸入流。
這裏是第二種方法,這是直截了當:
public Reader getContents (final URL url) {
try {
return new InputStreamReader(url.openStream());
} catch (final IOException e) {
e.printStackTrace();
}
return null;
}
這是有道理的做前者,但是這有什麼區別呢?
編輯 我所做的方法,就像接受的答案:
public static Reader getContents (final URL url) {
try {
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
String charset = connection.getHeaderField("Content-Type");
if (charset == null)
charset = "UTF-8";
else
charset = charset.replaceAll(".*charset=(.*)", "$1");
return new InputStreamReader(connection.getInputStream(), charset);
} catch (final IOException e) {
e.printStackTrace();
}
return null;
}
感謝您的回覆。我做了一個新的方法,可以在前一篇文章中看到:) – engineercoding 2015-01-04 15:24:23