【问题标题】:HttpURLConnection connect() , getInputStream() , getContent() , HttpGetHttpURLConnection connect() , getInputStream() , getContent() , HttpGet
【发布时间】:2018-01-13 03:49:02
【问题描述】:

我使用类 HttpURLConnection ,但我对某些方法感到困惑

假设 HttpURLConnection 对象名称为“c”

  1. 删除 c.connect() 将导致连接成功,它会毫无问题地检索连接结果

  2. c.getInputStream() 和 (InputStream) c.grtContent() 的输出是相同的,那么它们之间有什么区别

  3. 使用 HttpGet 会达到和 HttpURLConnection 一样的方法,那么这两种方法有什么区别

  4. HttpURLConnection 在 URLConnection 上的额外好处是什么

    c = (HttpURLConnection) (URL).openConnection(); c.connect(); //添加或删除结果相同,那么这个方法的用途是什么 InputStream 流= c.getInputStream(); InputStream stream2 = (InputStream) c.getContent(); //stream和stream2是一样的,那么getInputStream()和getContent()有什么区别

    //==============================

    HttpGet c=新的HttpGet(url); HttpResponse 响应 = c.execute(httpGet) InputStream stream3 = response.getEntity().getContent(); //stream3 也和 stream & stream2 一样;那么 HttpGet 和 HttpURLConnection 之间有何不同

【问题讨论】:

  • 不要将您的问题放在代码 cmets 中。放到代码外可见的英文句子中。
  • 完成@EJP ......

标签: java android networking httpurlconnection http-get


【解决方案1】:

来自 Android 文档:

[HttpURLConnection is] URLConnection,支持 HTTP 特定功能。

例如,您可以从 HttpURLConnection 检索 HTTP 方法或 HTTP 状态代码,它们是特定于 HTTP 的。

URLConnection 类是:

抽象类 URLConnection 是代表应用程序和 URL 之间的通信链接的所有类的超类

正常用法是:

  1. 创建一个URL 对象
  2. 致电url.openConnection() 获取URLConnection。返回的对象可以转换为HttpURLConnection
  3. 通过调用connection.getInputStream() 方法获得InputStream
  4. 关闭连接(disconnect()方法)(见@EJP cmets)

关于 connect() 方法,来自 Oracle 文档:

您并不总是需要显式调用 connect 方法来启动连接。依赖于连接的操作,如getInputStreamgetOutputStream 等,将在必要时隐式执行连接。

HttpGetHttpURLConnection 之间的区别在于它们属于 2 个不同的库,但在功能上它们或多或少是相同的(现在 HttpGet 已被弃用并删除,所以你不会找到它在标准的 Android API 中)

【讨论】:

  • 4.通过关闭输入流来关闭连接。 disconnect() 对连接池有影响,通常不使用。
  • 实际上文档建议在您完成阅读后断开连接。 “读取响应正文后,应通过调用 disconnect() 关闭 HttpURLConnection。”。您提到的事情听起来类似于旧 Android 版本(2.2 之前)中存在的错误:“在 Android 2.2 (Froyo) 之前,此类有一些令人沮丧的错误。特别是,在可读的 InputStream 上调用 close() 可能会中毒连接池”
  • 该文档与 Oracle 文档不符,因此出错。
  • 对不起,你是对的!我认为 Android 文档建议做错事一点都不好
  • 还有什么区别,c.getInputStream()和(InputStream) c.grtContent()>>都得到了同样的结果
猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 2013-03-11
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2011-09-05
  • 2015-11-28
相关资源
最近更新 更多