InputStream.read(byte[] b)
InputStream.read(byte[] b,int off,int len)
这两者都可批量读取数据,进入byte[]缓存。
但是即便是实现给定好byte[]的长度,指定长度进行读取,也不一定能完全读取数据。
这里的做法可用以下:
byte[] bodyReceived = new byte[dataLen];
int pos = 0;
while (pos < dataLen && -1 != (readLen = dataIn.read(bodyReceived, pos, dataLen - pos))) {
pos += readLen;
}
message = new String(bodyReceived, encode).trim();
int pos用于记录当前已经读取了多少长度
int dataLen用于记录本次读取了多少长度,记录后累加进pos中