研究AIO的时候,发现如果buffer定义小了会丢失部分内容
所以写了一个可以循环读取buffer的方法
private static final ByteBuffer buffer = ByteBuffer.allocate(32);
private static final List<byte[]> data = new ArrayList<>();
// 同步读取普通字节
private byte[] read() throws InterruptedException, ExecutionException
{
buffer.clear();
int b = 0;
int len = 0;
while ((b = socket.read(buffer).get()) != -1)
{
data.add(buffer.array().clone());
len += b;
buffer.flip();
}
byte[] data1 = new byte[len];
int src = 0;
for (byte[] bs : data)
{
if ((src + bs.length) > len)
System.arraycopy(bs, 0, data1, src, (len - src));
else
System.arraycopy(bs, 0, data1, src, bs.length);
src += bs.length;
}
data.clear();
return data1;
}