V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zsdroid
V2EX  ›  Java

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

  •  
  •   zsdroid · Jan 8, 2020 · 3737 views
    This topic created in 2301 days ago, the information mentioned may be changed or developed.

    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 replies    2020-01-08 14:44:07 +08:00
    fkdog
        1
    fkdog  
       Jan 8, 2020
    又不是所有的 http 请求一定要去往流里读写。
    假设你遇到一个场景,只需要调用一下 http 接口,不需要关心结果返回,那你不去调 connect 你怎么连接?
    zsdroid
        2
    zsdroid  
    OP
       Jan 8, 2020
    @fkdog #1 connect().好像只是建立了与服务器的 tcp 连接,并没有实际发送 http 请求。
    fkdog
        3
    fkdog  
       Jan 8, 2020
    @zsdroid
    看了下源码,好像的确只是建了链接。

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

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

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

    单纯从你的 case 里看,connect()单独调用并没有什么作用,存粹是为了扩展 UrlConnection 这个接口。
    zsdroid
        4
    zsdroid  
    OP
       Jan 8, 2020
    @fkdog #3 瞬间豁然开朗。感谢大佬指点。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5748 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 07:10 · PVG 15:10 · LAX 00:10 · JFK 03:10
    ♥ Do have faith in what you're doing.