V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zsdroid
V2EX  ›  Java

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

  •  
  •   zsdroid · 2020-01-08 11:41:26 +08:00 · 3395 次点击
    这是一个创建于 1785 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 个文不答题的回答。

    求大佬指点!!

    4 条回复    2020-01-08 14:44:07 +08:00
    fkdog
        1
    fkdog  
       2020-01-08 12:30:37 +08:00
    又不是所有的 http 请求一定要去往流里读写。
    假设你遇到一个场景,只需要调用一下 http 接口,不需要关心结果返回,那你不去调 connect 你怎么连接?
    zsdroid
        2
    zsdroid  
    OP
       2020-01-08 14:03:42 +08:00
    @fkdog #1 connect().好像只是建立了与服务器的 tcp 连接,并没有实际发送 http 请求。
    fkdog
        3
    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
        4
    zsdroid  
    OP
       2020-01-08 14:44:07 +08:00
    @fkdog #3 瞬间豁然开朗。感谢大佬指点。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 15:00 · PVG 23:00 · LAX 07:00 · JFK 10:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.