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