InputStream.available()使⽤⼤坑
问题场景:⽂件下载功能,需要对原来的⽂件进⾏读取再输出到⽂件或浏览器中,会常⽤到InputStream.available()⽅法。经历过⼀次系统功能变更升级,需要将⽂件先下载到本地再响应出去,发现下载的⽂件不全
百思不得其解,搜索好久资料,查得知,以备忘记
这个⽅法可以在读写操作前先得知数据流⾥有多少个字节可以读取。
需要注意的是,如果这个⽅法⽤在从本地⽂件读取数据时,⼀般不会遇到问题,
但如果是⽤于⽹络操作,就经常会遇到⼀些⿇烦。⽐如,Socket通讯时,
对⽅明明发来了1000个字节,但是⾃⼰的程序调⽤available()⽅法却只得到900,
或者100,甚⾄是0,感觉有点莫名其妙,怎么也不到原因。
其实,这是因为⽹络通讯往往是间断性的,⼀串字节往往分⼏批进⾏发送。
本地程序调⽤available()⽅法有时得到0,这可能是对⽅还没有响应,也可能是对⽅已经响应了,
但是数据还没有送达本地。对⽅发送了1000个字节给你,也许分成3批到达,onpaste不能用input
这你就要调⽤3次available()⽅法才能将数据总数全部得到。
所以在进⾏⽹络数据传输时候,不能使⽤InputStream.available(),这个⽅法导致系统出现长时间暂停状态
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论