如何在java中重置URLConnection?

Posted

技术标签:

【中文标题】如何在java中重置URLConnection?【英文标题】:How to reset URLConnection in java? 【发布时间】:2011-08-14 00:30:42 【问题描述】:

有没有办法重置连接,以便我可以从文档的开头读取? 从sarting重新连接读取是一个缓慢的过程,我想通过http每秒读取一个文件20次,有没有其他方法可以做到这一点?

【问题讨论】:

【参考方案1】:

URLConnection 是一个简单但有点“愚蠢”的类。我可以建议您使用 Java 方式:实例化一个新的 URLConnection。 ;) Java 并不是一种真正支持对象重用的语言。

您可以尝试重置输入流,请参阅docs 了解更多信息,但我认为它不会再执行一次 GET。谁知道URLConnections的InputStream和OutputStream背后的具体实现是怎么做的。

编辑:我不保证任何事情,但您也可以尝试断开连接(),然后再次连接()。没试过,看看有没有用。

【讨论】:

如果实例化一个新的 URLConnection,我如何从 0 继续读取? 继续实例化新的 URLConnections 然后从它们提供的 InputStream 中读取。它不会那么慢和迟钝,因为瓶颈可能是网络,而不是你会导致这样做的垃圾收集。要使用网络做一些好事,请使用原始套接字或某些特定库。 URLConnection 及其具体实现是开箱即用的东西。 此外,如果您在 HTTP 服务器上进行“压力测试”之类的操作,您可以考虑启动多个线程。由于有大量 I/O 和少量 CPU,启动更多线程可以提高吞吐量(每秒生成新连接)。要启动更多线程,只需将您的连接逻辑放在一个可运行对象中,然后在 for 循环中创建许多运行该可运行对象的线程并加入所有线程,稍后(不要在启动后加入每个线程,这就像序列化) 这是正确的答案,但不是正确的解释。在幕后抽象出来的是一个连接池——HTTPUrlConnection 默认是“keep-alive”。当您创建一个新的 HTTPUrlConnection 时,如果它在池中可用并且没有超时,它将重新使用连接。 简而言之,HTTPUrlConnection 不是“哑”类。 ;)【参考方案2】:

默认情况下是没有办法的。如果你真的想要这个功能,你已经为此编写了一些代码。 编写一个 URLHandler,它提供了一个套接字包装器,它进行缓冲。随心所欲地实现重置方法()。

谢谢, 拉梅什

【讨论】:

以上是关于如何在java中重置URLConnection?的主要内容,如果未能解决你的问题,请参考以下文章

Java-HttpURLConnection详细说明与实例

Java:如何使用 UrlConnection 发布授权请求?

java中的URLConnection如何重用池中的连接

如何在 URLConnection 中发送 cookie?

URLConnection-URL连接

如何使用JAVA语言抓取某个网页中的邮箱地址