Groovy中URL.getText()是否总会关闭连接?
关于Groovy URL.getText()方法流关闭的疑问解答
这个问题问得特别细致,你完全没有过度解读!咱们从实际行为和Groovy的实现逻辑来理清楚:
1. 所有getText()变体的行为是一致的
不管是无参的getText(),还是带String charset、Map parameters的重载版本,最终都会在方法返回前关闭连接流。
原因很简单:无参的getText()底层直接调用了带字符集参数的版本(默认使用平台默认编码),而带参数的版本内部都是用try-with-resources或者finally块来处理流资源的——这是Groovy处理I/O操作的标准做法,不可能特意留一个不关闭流的版本造成资源泄漏。
2. 文档属于疏漏情况
这确实是Groovy文档的小疏漏。很多时候,文档会只在某个重载方法里详细说明共性行为,其他重载版本就没重复写,但这不代表行为有差异。关闭流是这类网络I/O方法的基本职责,Groovy的API设计不会在这点上搞特殊。
3. 可以通过源码验证
如果你想确认的话,看Groovy的URL扩展类源码就能一目了然:
// 无参getText()的实现 public String getText() throws IOException { return getText(Charset.defaultCharset().name()); } // 带charset参数的getText()核心逻辑(简化版) public String getText(String charset) throws IOException { try (Reader reader = new InputStreamReader(openStream(), charset)) { return IOUtils.toString(reader); } }
无参版本直接复用了带charset的逻辑,而带charset的版本用了try-with-resources自动关闭Reader,自然也会关闭底层的连接流。
总结一下:你不用纠结文档的差异,所有getText()方法都会自动关闭连接流,只是文档没在无参版本里重复说明而已~
内容的提问来源于stack exchange,提问作者Oliver Mason
相关产品推荐
相关产品推荐

