关于InputStream类的available()方法


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

      若是这样写代码:
  int count = in.available();
  byte[] b = new byte[count];
  in.read(b);
      在进行网络操做时每每出错,由于你调用available()方法时,对发发送的数据可能尚未到达,你获得的count是0。
         须要改为这样:
  int count = 0;
  while (count == 0) {
   count = in.available();
  }
  byte[] b = new byte[count];
  in.read(b);
相关文章
相关标签/搜索