关于JAVA的一些事儿

  1. 今天再写多线程断点下载时,因为要模拟终端下载的行为,在程序中使用了system.exit(0)函数,一开始程序很正常,后来偶然一次调试程序时,发现某个线程已经完成下载了,但该线程的数据却没有被删除,很奇怪,理论上讲finally块中的程序无论程序正常或异常都会去执行,经过查阅文档,发现该函数的功能是结束JVM,恍然大悟,JVM都已经结束了,怎么可能还会去执行程序呢?!
  2. 关于inputStram.available()的小事,还是在今天写多线程断点下载时遇到的,很奇怪,我是用该方法给byte数组赋长度,但是很奇怪的是,线程下载的字节一直是0,然后看了一下inputStream.read(bs)方法的说明,说是字节数组bs的长度为0时,会返回0,当时很纳闷,难道输出流就没有任何字节吗?然后我终端线程下载,再开启时,发现该线程又能下载了,很奇怪,经过查阅,发现了关于available()方法的一些有趣的事:此方法只能适用于本地文件的读取,但是用于网络通讯、下载时,
         由于服务器发送数据是间断性的,一串字节往往分几批发送,
          本地程序调用available()方法有时会得到0,这可能是对方还没有响应,
          也可能是对方响应了,但是数据还没有送达本地。例如对方发送了1000个
          字节给你,也许分3批到达,这你就要用调用3次available()方法才能将数据总数全部得到。更特别的是inputStram.available()的返回值总是0,也就是说该方法的实现是靠子类重写的,fileinputstream.available()方法是通过文件描述符获取文件的总大小,而并不是事先将磁盘上的文件数据全部读入流中,再获取文件总大小。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值