我们的程序读Socket数据,发现当服务器端发送大于一定字节的数据时,客户端代码总是读不全数据,很急,请大家帮看看。小数据时候没有问题。大数据也不是特别的大就几十K .protected static byte[] readInputStream(InputStream _in) throws IOException {
byte data[] = null;
if(_in==null)
throw new IOException("InputStream can't be null!");
int s = _in.read();
if(s==-1) {
return null; //Connection lost
}
int alength = _in.available();
if(alength > 0) {
data = new byte[alength+1];
_in.read(data, 1, alength);
} else {
data = new byte[1];
}
data[0] = (byte)s;
return data;
}
byte data[] = null;
if(_in==null)
throw new IOException("InputStream can't be null!");
int s = _in.read();
if(s==-1) {
return null; //Connection lost
}
int alength = _in.available();
if(alength > 0) {
data = new byte[alength+1];
_in.read(data, 1, alength);
} else {
data = new byte[1];
}
data[0] = (byte)s;
return data;
}
而且没有结束校验建议你设置成带有结束符号的 如 123#END收到 #END时才认为读取完全了否则 不断的重试 直到超时@_@
但是我用 int alength = _in.available(); 得到了所有的字节阿
_in.available();返回的只是可以不受阻塞地从此输入流读取(或跳过)的字节数,并不一定是服务端所写入全部数据(数据量大时可能小于,当然数据量较少是两者有可能相等)
可用如下方法:
int len;
while((len=_in.read(data))!=-1){
//相关的处理
}
LZ用的不是带缓存的吧?