admin管理员组文章数量:1794759
available()方法的使用总结
先看看API的说明:
public int available() throws IOException 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不 会受阻塞,但读取或跳过的字节数可能小于该数。 <strong><span style="font-size:18px;">注意:</span></strong>有些 InputStream 的实现将返回流中的字节总数,但也有很多实现不会这样做。试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的。 如果已经调用 close() 方法关闭了此输入流,那么此方法的子类实现可以选择抛出 IOException。 类 InputStream 的 available 方法总是返回 0。 <strong>此方法应该由子类重写。</strong> 返回: 可以不受阻塞地从此输入流读取(或跳过)的估计字节数;如果到达输入流末尾,则返回 0。 但是在 FileInputStream中已经重写了这个方法,重写之后的方法是通过文件的描述来获取文件的大小的。那么,我们来看看哪些地方可以用available()方法来获取文件大小,进而用来定义缓冲数组的长度。
1.在本地文件文件中,这里我一般是直接使用的。
2.网络中的文件
a.比如web 中http 里面的文件流里面,第一种情况有content-length,那么小文件的情况,我们是直接可以通过request 获取该属性,也就知道文件的大小了。
b.在某些情况下,比如文件比较大,采用采用分段方式,长连接的方式发送,不能一次知道文件大小,http 的header 里面就没有上面的content-length 属性,而是变成了Transfer-Encoding: chunked属性,这表示分段发送信,但是对整个文件的接受,可以通过一些标志位,或者一些超时限制等方法处理,这里不具体研究了。
c.socket 传输文件,这玩意我看了下源码,是没重写available方法的,也就是说我们不能通过这个知道流的字节数,一般情况下,我们可以先发送一段自定义的header 过去,描述文件大小,然后再循环持续获取流信。
本文标签: 方法
版权声明:本文标题:available()方法的使用总结 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686992792a126384.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论