在创建socket使用inputstream输入流,read()方法,如果调用的是available(),返回字节流的长度时,可能会返回0,或者其他数值,进行网络操作时往往出错,因为你调用available()方法时,对发发送的数据可能还没有到达,你得到的count是0。
网络传输中实现方式如下:
int readBytes = 0;
byte[] buffer = new byte[1024];//1024可改成任何需要的值
int len = buffer.length;
while (readBytes < len) {
int read = inputStream.read(buffer, readBytes, len - readBytes);
//判断是不是读到了数据流的末尾 ,防止出现死循环。
if (read == -1 || read < (len - readBytes)) {
readBytes += read;
break;
}
if(read == (len - readBytes)) {
byte[] tmpBuffer = new byte[len * 2];
System.arraycopy(buffer, 0, tmpBuffer, 0, buffer.length);
buffer = tmpBuffer;
len = buffer.length;
}
readBytes += read;
}
byte[] endodedData = new byte[readBytes];
System.arraycopy(buffer, 0, endodedData, 0, readBytes);
System.out.println(endodedData.length);