事情是这样的,维护一个老项目,要用到 Jython。
在 Jython 中请求网络连接,我尝试过 urllib2, httplib,碰到了一个这样的问题:
如果是 Jython 脚本第一次发送 GET 请求,是能正确获取到响应的内容( JSON 文件),一旦停止 Jython 脚本,再次启动,就会报错。网上搜了一下,stackoverflow 上面有人解释是 urllib2, httplib 使用了 Netty 库,这个问题是 Netty 造成的,推荐解决方案是用 Requests 库。
参考: https://stackoverflow.com/questions/32239955/why-does-this-jython-loop-fail-after-a-single-run
由于不想引入太多的依赖增加维护成本,我没有使用 Requests 库,直接用 java.url 库实现了一个版本。上面的问题已经通过这个方式解决。
当前的问题是,在使用 Java 自带的 java.url 库的时候,我看 stackoverflow 上有人说在 finally 部分对打开的连接和 InputStream 进行检查,如果可以就进行回收。(详见下面代码的 finally 部分)我想了解一下在不用框架直接用库的情况下这种写法是值得推荐的还是必须强制的?这样的操作适用于 Jython 么?
参考: https://stackoverflow.com/questions/9150200/closing-urlconnection-and-inputstream-correctly
HttpURLConnection conn = null;
InputStream is = null;
try {
URL url = new URL("http://example.com");
// (set connection and read timeouts on the connection)
conn = (HttpURLConnection)url.openConnection();
is = new BufferedInputStream(conn.getInputStream());
doSomethingWithInputStream(is);
} catch (Exception ex) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
if (conn != null) {
conn.disconnect();
}
}
1
LeeSeoung 2019-07-26 11:54:52 +08:00 1
可以了解下 try(InputStream is = xxxx)这种形式的写法
|
2
wc951 2019-07-26 13:19:35 +08:00 via Android
jdk7 以上就有 try-with-resource 语法糖了
|
3
shayuvpn0001 OP |
4
skypyb 2019-07-26 14:15:08 +08:00 1
连接和流最好都是手动回收,你这样写没啥问题啊
|