要一次读取多个字节时,常常用到InputStream.available()方法,这个方法能够在读写操做前先得知数据流里有多少个字节能够读取。须要注意的是,若是这个方法用在从本地文件读取数据时,通常不会遇到问题,但若是是用于网络操做,就常常会遇到一些麻烦。好比,Socket通信时,对方明明发来了1000个字节,可是本身的程序调用available()方法却只获得900,或者100,甚至是0,感受有点莫名其妙,怎么也找不到缘由。其实,这是由于网络通信每每是间断性的,一串字节每每分几批进行发送。本地程序调用available()方法有时获得0,这多是对方尚未响应,也多是对方已经响应了,可是数据尚未送达本地。对方发送了1000个字节给你,也许分红3批到达,这你就要调用3次available()方法才能将数据总数所有获得。 网络
若是这样写代码: