`

URLConnection 读取字节流

阅读更多
继某次项目代码中使用URL来 GET 某个HTTP方式提供的服务,连接没有关闭而导致连接数巨多之后,今天这个山寨Wget又惹事了,堵死了线程池,定时服务器都执行不了。

解决办法:
不使用 new URL(url).getContent()这种山寨做法,有内存泄露和读超时问题
使用 new URL(url).openConnection() 打开一个 URLConnection,调用它的 setReadTimeout() 方法,设置读的超时。
然后调用 connect() 读数据,通过InputStream,数据读取完记得关闭stream
最后,最好将这个 URLConnection 转型为 HttpURLConnection (当这个连接是一个HTTP调用),调用 disconnect() 方法。文档说明如下:


引用
public abstract void disconnect()
指示近期服务器不太可能有其他请求。调用 disconnect() 并不意味着可以对其他请求重用此 HttpURLConnection 实例。


引用
每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络。请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响。如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字。


这种做法是可选的,我倾向于这样做来保证不会有太多持久Socket连接。

btw,使用HTTPClient是个更好的方式,不过要注意它的陷阱
分享到:
评论

相关推荐

    例10.02 使用字节流访问URL资源.rar_url

    `InputStream`是所有字节输入流的基类,用于读取字节数据。在此场景中,我们通常会将其包装为更方便的子类,如`BufferedInputStream`,它提供了缓冲区功能,提高读取性能: ```java BufferedInputStream ...

    Android通过URL获取网络资源.doc

    为了避免频繁读取字节流,提高读取效率,我们可以使用 BufferedInputStream 缓存读到的字节流: ```java BufferedInputStream bis = new BufferedInputStream(is); ``` 然后,我们可以使用 read 方法读入网络数据...

    java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题

    3. **输入流和缓冲区**: 通过`getInputStream()`方法获取输入流,然后使用`BufferedReader`进行读取,这样可以提高效率。创建`BufferedReader`时,传入`InputStreamReader`,并指定为UTF-8编码,例如:`new ...

    图片转流存库和读取二进制流页面展示

    4. **读取输入流**: 使用`URLConnection`对象的`getInputStream()`方法获取一个输入流,用于读取图片数据。 5. **转换为字节数组**: 将输入流中的数据逐块读取出来,最终合并成一个完整的字节数组。 ```java public...

    java.io.Reader 和 java.io.InputStream 的区别

    1. **`FileInputStream`**:从文件中读取字节数据,类似于`FileReader`但更通用,因为它可以读取任何类型的数据,而不仅仅是文本。 2. **`ByteArrayInputStream`**:从内存中的字节数组读取数据,适用于需要将字节...

    Java 从网络中读取图片 转换成Base64字符串

    3. 读取输入流:使用`getInputStream()`方法获取图片的输入流。 ```java InputStream is = connection.getInputStream(); ``` 接下来,我们将图片数据转换为Base64字符串。Java 8引入了`java.util.Base64`工具类,...

    java io 2nd

    - **字节流与字符流**:Java I/O库分别提供了字节流和字符流的类,如`InputStream`和`OutputStream`用于处理字节数据,`Reader`和`Writer`用于处理字符数据。 - **缓冲区与通道**:为了提高I/O操作的效率,Java...

    Java读URL, 如Q日志

    5. **读取日志数据**:读取日志数据通常涉及到解析文本,可能需要`BufferedReader`和`InputStreamReader`组合使用,将字节流转换为字符流,便于按行读取。 6. **异常处理**:网络编程中常遇到异常,如`...

    Java网络编程示例

    8. **TCP和UDP**:TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP(用户数据报协议)则是无连接的、不可靠的、基于数据报的协议。Java的Socket类主要用于TCP编程,而...

    java网络编程

    通过这两个流,我们可以将Java对象序列化为字节流,然后在网络上传输,也可以读取接收到的字节流并反序列化为对象。 五、URL与URLConnection 除了Socket API外,Java还提供了URL和URLConnection类来处理HTTP和其他...

    java post文件流的操作

    - `setDoOutput()` 和 `setDoInput()`:分别表示是否允许写入输出流和读取输入流。 - `setRequestProperty()`:设置请求头属性,如User-Agent、Referer等。 #### 2.2 发送请求数据 - `getOutputStream()`:获取...

    Android 使用URLConnection下载音频文件的方法

    4. 通过输入流读取数据,输出流写入本地文件。 5. 监控下载进度,并处理可能的异常情况。 6. 考虑如何处理已存在的本地文件和断点续传。 在实际开发中,可以进一步优化这个过程,比如添加多线程下载以提高速度,...

    11.009.JAVA基础教程_编程入门-输入输出设备和网络连接设备(11).rar

    Java提供了丰富的I/O类库,如InputStream、OutputStream、Reader、Writer等,它们分别处理字节流和字符流。例如,FileInputStream和FileOutputStream用于文件读写,System.in和System.out则代表标准输入和输出流。 ...

    java常用的工具类整理28个

    12. **java.io.InputStreamReader**和**java.io.OutputStreamWriter**:字符流与字节流的桥梁,支持字符编码转换。 13. **java.io.ObjectInputStream**和**java.io.ObjectOutputStream**:用于对象的序列化和反序列...

    安卓读取网络图片

    4. **InputStream与Bitmap**:一旦连接成功,我们可以从`HttpURLConnection`的输入流中读取数据。通常,图片数据会被转换成字节数组,然后通过`BitmapFactory`解析成`Bitmap`对象。`BitmapFactory.Options`类可以...

    一个简单的获取URL 数据方法,附文档代码

    - **ByteArrayOutputStream**: 字节数组输出流,可以将其视为内存中的文件输出流,便于处理从网络中读取的数据。 ##### 3. SnatchData 类详解 该类名为`SnatchData`,其主要功能是通过传入的URL字符串,获取该URL...

    java 读取网页内容的实例详解

    `InputStreamReader`是字符流,它接受一个字节流并指定一个字符编码。在这里,我们指定编码为"GB2312",根据实际网页编码进行调整。 `BufferedReader`则用于提高读取效率,通过`readLine()`方法逐行读取内容。最后...

    基于Java的源码-从网络取得文件.zip

    这通常涉及读取输入流的总大小,并在读取过程中比较当前已读取的字节数。 10. **断点续传**: 对于大文件下载,有时需要支持断点续传,即记录上次下载的位置,下次可以从该位置继续下载。这需要额外的逻辑来处理。...

    通过http协议的url下载文件

    3. **InputStream**:Java中用于读取数据的基本接口之一,适用于读取字节流。 4. **OutputStream**:Java中用于写入数据的基本接口之一,适用于写入字节流。 5. **FileOutputStream**:用于将数据写入文件的输出流。...

    计算机与软件学院 JAVA实验报告 6

    - 通过`read()`方法逐字节读取输入流,直到没有更多数据为止,然后将字节转换为字符输出。 4. **错误处理**: - 在实验代码中,使用了try-catch语句来捕获可能出现的异常,如`MalformedURLException`(当URL格式...

Global site tag (gtag.js) - Google Analytics