HttpURLConnection.connect()的作用是什么?

2020-01-08 11:41:26 +08:00
 zsdroid

php 转 java 中。。

网上一大片不知道谁 copy 谁的文章,说 getResponseCode(),getInputStream(),getOutputStream()会隐式调用 connect(),所以不用写 connect()

既然不用写,那HttpURLConnection.connect()这个方法存在的意义是什么?

找了半天,在 stackoverflow 上找到一个和我一样好奇心重的人。

https://stackoverflow.com/questions/16122999/java-urlconnection-when-do-i-need-to-use-the-connect-method

结果只得到了 2 个文不答题的回答。

求大佬指点!!

3317 次点击
所在节点    Java
4 条回复
fkdog
2020-01-08 12:30:37 +08:00
又不是所有的 http 请求一定要去往流里读写。
假设你遇到一个场景,只需要调用一下 http 接口,不需要关心结果返回,那你不去调 connect 你怎么连接?
zsdroid
2020-01-08 14:03:42 +08:00
@fkdog #1 connect().好像只是建立了与服务器的 tcp 连接,并没有实际发送 http 请求。
fkdog
2020-01-08 14:31:53 +08:00
@zsdroid
看了下源码,好像的确只是建了链接。

HttpUrlConnection 是 UrlConnection 的扩展类,这个接口是把 connect 标注成了 public。
意味着你可以自行扩展其他 UrlConnection,

如果是 HttpKeepAliveUrlConnection 和 Http2UrlConnection 类似这类多个请求复用链接的,想自己搞一个链接池,connect 单独调用就有必要了。

另外 UrlConnection 有一个 FtpUrlConnection,这个 connect()方法就是需要单独调用,因为一些 ftp 服务器需要登录,都是在这个 connect 方法里完成的。

单纯从你的 case 里看,connect()单独调用并没有什么作用,存粹是为了扩展 UrlConnection 这个接口。
zsdroid
2020-01-08 14:44:07 +08:00
@fkdog #3 瞬间豁然开朗。感谢大佬指点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/636084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX